【问题标题】:How to declare a table class that contains multi-column primary key?如何声明包含多列主键的表类?
【发布时间】:2021-07-10 00:13:17
【问题描述】:

主键的列必须按特定顺序排列。

我从文档中看到了一些代码:

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer)

    __mapper_args__ = {
        'primary_key':[id]
    }

但是就是不行(我用的是mysql,不会生成id主键)。 任何可能的解决方案?

【问题讨论】:

    标签: sqlalchemy


    【解决方案1】:

    如果列的声明顺序与它们应该在主键中的顺序相同:

    class User(Base):
        field1 = Column(Integer, primary_key=True)
        field2 = Column(Integer, primary_key=True)
    

    否则声明在__table_args__:

    class User(Base):
        field1 = Column(Integer)
        field2 = Column(Integer)
        __table_args__ = (
            PrimaryKeyConstraint(field2, field1),
            {},
        )
    

    【讨论】:

    • 它有效。 Thx~ BTW,上面的示例代码是什么意思?
    • @ymfoi ORM 配置不会影响表架构。 'primary_key' in __mapper_args__ 只是指示映射器将这些字段用作身份。
    • 这是否可以扩展到包含示例Table 定义,因此它也可以成为核心问题的一个很好的欺骗目标。也许也可以编辑问题以适应变化。
    • 从 1.4 版开始,您不再需要引号,例如:PrimaryKeyConstraint(field2, field1),
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 2019-04-30
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多