ポータルをFlask with Flask-SQLAlchemy(MySQL)に移行しています。以下は、既存のポータルのDBを作成するために使用したコードです。
Users = """CREATE TABLE Users(
id INT UNSIGNED AUTO_INCREMENT NOT NULL,
UserName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40) NOT NULL,
LastName VARCHAR(40) NOT NULL,
EmailAddress VARCHAR(255) NOT NULL,
Password VARCHAR(40) NOT NULL,
PRIMARY KEY (id)
) """
これが私がSQLAlchemyでそれを使おうとしている方法です:
class Users(db.Model):
id = db.Column(db.Integer, primary_key=True)
UserName = db.Column(db.String(40))
FirstName = db.Column(db.String(40))
LastName = db.Column(db.String(40))
EmailAddress = db.Column(db.String(255))
Password = db.Column(db.String(40))
私の質問は、SQLAlchemyモデルを符号なし整数として指定するにはどうすればよいですか?
SQLAlchemyタイプ( 整数 など)は、標準のSQLデータタイプに従おうとしているようです。 「符号なし整数」は標準のデータ型ではないため、UnsignedInteger
やInteger(unsigned=True)
のようなものは表示されません。
このような場合(MySQLなどのデータベース自体が標準のデータ型ではないデータ型または標準ではないオプションがある場合)、方言固有の型を取得することでこれらの型/オプションにアクセスできます。 MySQLの場合、これらのタイプには sqlalchemy.dialects.mysql
module 、そのように...
from sqlalchemy.dialects.mysql import INTEGER
class Users(db.Model):
id = db.Column(INTEGER(unsigned=True), primary_key=True)
UserName = db.Column(db.String(40))
FirstName = db.Column(db.String(40))
LastName = db.Column(db.String(40))
EmailAddress = db.Column(db.String(255))
Password = db.Column(db.String(40))
非常に遅いかもしれませんが、モデルクラスでMySQLやSqlLiteなどの複数のデータベースエンジンを管理できるようにしたい場合(たとえば、単体テスト中)。あなたができることは:
UnsignedInt = Integer()
UnsignedInt = UnsignedInt.with_variant(INTEGER(unsigned=True), 'mysql')
そして、あなたの宣言型モデルでは:
class Meta(Base):
__tablename__ = 'meta'
meta_id = Column(UnsignedInt, primary_key=True)
meta_key = Column(String(64), nullable=False, )
meta_value = Column(String(128))
species_id = Column(UnsignedInt)