2016-04-29 19 views
3

私は2つのアプローチを試みましたが、どちらも機能していませんでした。私はGoogleで検索し、適切な解決策を見つけられませんでした。私のコードは次のようになります。Sqlalchemyで一定の長さの整数を作成する方法は?

intField = Column(SmallInt(), length=5) 

、エラーが言う:

Unknown arguments passed to Column: ['length'] 

私も、それは動作しないはずです知って、このソリューションを試してみました:

intField = Column(SmallInt(5)) 

をそして、それは動作しません。このSqlAlchemyデータ型は引数を受け入れないためです。

アイデア?

[更新]

私は、データベースエンジンとしてMySQLを使用していますので、ここでの解決策は、MySQLの独自の整数型をインポートし、私はそれになりたい長さを指定することです。

上記の例では、私だけ行う必要があります:

from sqlalchemy.dialects import mysql 

Integer = mysql.INTEGER 

class ... 
    ... 
    intField = Column(Integer(5)) 

しかし、より一般的なアプローチがある場合、私はまだだろうか?

+0

数値だけを受け入れる妥当性検証を行う 'String(6)'の代わりに数値フィールドを使う理由は何ですか? – iurisilvio

+0

検証、変換などの操作によってオーバーヘッドが増加します。計算が必要な場合は、整数で動作するPlusが高速になります。私はここで属性として 'code'を使うのはちょっと誤解を招いていると思うので、私のユースケースをより良く説明するためにそれを変更してみましょう。 – benjaminz

答えて

2

MySQLはDECIMAL/NUMERICタイプです。

Decimal(5, 0)を5桁のフィールドに使用します。

実際に番号が必要な場合にのみ、これを使用してください。このフィールドで数学を行わない場合は、String(5)を好きにして数字を確認してください(isdigit()はあなたの友人です)。

SQLAlchemyでは、Numeric fieldとして処理します。

+0

こんにちは、混乱については申し訳ありませんが、郵便番号の使用は悪い例です。私はこのフィールドで計算をしたいのかどうかを尋ねることを意図していました。また、このフィールドの列幅を指定する必要があります。どうしましょう? – benjaminz

+1

@benjaminzは、例えば 'DECIMAL(5、0)'を使用します。 SQLAlchemyでは、それは 'Numeric'フィールドです。 http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sqlalchemy.types.Numeric – iurisilvio

+0

これは適切な解決策になります。回答を受け入れられるように更新できますか?ありがとう! – benjaminz

関連する問題