繁体   English   中英

为什么我收到SQLAlchemy错误“ __table_args__值必须是元组,字典或无”

[英]Why am I getting SQLAlchemy Error “__table_args__ value must be a tuple, dict, or None”

我有以下SQLAlchemy模型。 它已成功迁移到数据库:

class MyClassA(db.Model, Timestamp):
    a_id = db.Column(db.Integer, nullable=False, primary_key=True)
    b_id = db.Column(db.Integer, db.ForeignKey(C.c_id), nullable=False)
    d = db.Column(db.String(1024))
    e_id = db.Column(db.Integer,
                      db.ForeignKey(e.e_id))

现在,我想在第二和第四字段中添加唯一性约束。 因此,我将以下行添加到模型中:

     __table_args__ = db.UniqueConstraint('b_id', 'e_id', name='unique_constraint_bid_eid')

但是现在当我尝试迁移它时,出现以下错误:

sqlalchemy.exc.ArgumentError: __table_args__ value must be a tuple, dict, or None

为什么会出现此错误? 我该如何解决? 我尝试将等式的右边放在括号中,但这并不能解决问题。

如错误代码所建议的那样, table_args应该是一个元组,dict或None。 如果将其设为元组,则必须将值放在括号中,并在末尾加上逗号:

尝试:

     __table_args__ = (db.UniqueConstraint('b_id', 'e_id', name='unique_constraint_bid_eid'), )

参考此表配置

使用table_args类属性指定名称,元数据和映射的列参数以外的表参数。 此属性可容纳通常发送到Table构造函数的位置参数和关键字参数。 可以两种形式之一指定属性。 一个是作为字典:

class MyClass(Base):
    __tablename__ = 'sometable'
    __table_args__ = {'mysql_engine':'InnoDB'}
    enter code here

另一个是元组,其中每个参数都是位置参数(通常是约束条件):

class MyClass(Base):
    __tablename__ = 'sometable'
    __table_args__ = (
            ForeignKeyConstraint(['id'], ['remote_table.id']),
            UniqueConstraint('foo'),
            )

通过将最后一个参数指定为字典,可以使用上述形式指定关键字参数:

class MyClass(Base):
    __tablename__ = 'sometable'
    __table_args__ = (
            ForeignKeyConstraint(['id'], ['remote_table.id']),
            UniqueConstraint('foo'),
            {'autoload':True}
            )


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM