【问题标题】:sqlalchemy autoincrement value as foreign key mysqlsqlalchemy自动增量值作为外键mysql
【发布时间】:2015-02-14 08:28:24
【问题描述】:

我正在尝试使用自动递增的唯一 ID 字段作为其他表中的外键。我的模型如下:

class User(Base):
        __tablename__ = 'Users'

        uid = Column(INT, primary_key=True, autoincrement=True)
        name = Column(TEXT)
        email = Column(TEXT)
        dateRegistered = Column(TIMESTAMP)
        phone = Column(TEXT)

class AddressMap(Base):
        __tablename__ = 'AddressMaps'

        uid = Column(INT, primary_key=True, autoincrement=True)
        userId = Column(INT, ForeignKey('Users.uid'))
        addressId = Column(INT, ForeignKey('Addresses.uid'))
        dateCreated = Column(TIMESTAMP)


        user = relationship("User", backref=backref('AddressMaps'))
        address = relationship("Address", backref=backref('AddressMaps'))

class Address(Base):
        __tablename__ = 'Addresses'

        uid = Column(INT, primary_key=True, autoincrement=True)
        street = Column(TEXT)
        city = Column(TEXT)
        state = Column(TEXT)
        postal = Column(TEXT)
        dateRegistered = Column(TIMESTAMP)

我的问题是,当我创建一个用户对象时,它不是使用 uid 值创建的。我理解这是因为该对象尚未提交到数据库。问题是,由于 User 对象的 uid 值为 None,所以我无法将 AddressMap 对象与其链接。

在 SQLAlchemy 中处理这个问题的惯用方法是什么?

【问题讨论】:

    标签: python mysql sqlalchemy auto-increment foreign-key-relationship


    【解决方案1】:

    您不需要 uid。由于您已经在表之间创建了关系,您将能够向用户添加一个AddressMap 对象:

    samantha = User(name='Sam', email='sam@xyz.abc', phone='555-555-5555')
    

    您现在可以访问samantha.AddressMaps 集合(在AddressMap 表中的user 关系下查看您的backref)。您可以将AddressMap 对象添加到此集合中:

    samantha.AddressMaps = [AddressMap(dateCreated=datetime.now()),
                            AddressMap(dateCreated=datetime.min)]
    

    现在您可以将这些对象添加到您的sessioncommit。请参阅the docs 了解更多信息。

    顺便提一下,仅供参考,you don't need to include autoincrement=True 在表的第一个整数列上。

    【讨论】:

    • 这个答案救了我的命。谢谢你。
    猜你喜欢
    • 2015-11-13
    • 2014-04-21
    • 2021-10-29
    • 2023-03-13
    • 1970-01-01
    • 2013-01-02
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多