簡體   English   中英

sqlalchemy autoincrement值為外鍵mysql

[英]sqlalchemy autoincrement value as foreign key mysql

我試圖在其他表中使用自動增量唯一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中處理這個問題的慣用方法是什么?

你不應該需要一個uid。 由於您已在表之間創建了關系,因此您可以向用戶添加AddressMap對象:

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

您現在可以訪問samantha.AddressMaps集合(請參見backref在你的user關系在您的AddressMap表)。 您可以將AddressMap對象添加到此集合:

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

現在,您可以將這些對象添加到sessioncommit 有關詳細信息,請參閱文檔

順便提一下,就像FYI一樣, 您不需要在表的第一個整數列中包含autoincrement=True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM