如何在SQLAlchemy中定义无符号整数

2024-04-29 10:02:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Flask SQLAlchemy(MySQL)将门户迁移到Flask。下面是我用于为现有门户创建数据库的代码:

 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模型指定为无符号整数?


Tags: idflaskdbstring门户sqlalchemyusernamenot
2条回答

可能已经很晚了,但是如果您希望您的模型类能够管理多个数据库引擎,比如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)

SQLAlchemy类型(例如Integer)似乎试图遵守标准的SQL数据类型。由于“unsigned integer”不是标准数据类型,因此您不会看到类似UnsignedIntegerInteger(unsigned=True)的内容。

在这种情况下(例如MySQL这样的数据库本身不是标准数据类型或具有非标准选项的数据类型),可以通过获取特定于方言的类型来访问这些类型/选项。对于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))

相关问题 更多 >