SqlAlchemy:如何处理所需的循环外键

2024-04-25 19:10:08 发布

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

我想建立一个用户有许多地址和能够有一个“主要”地址。在

我试图通过使primary_address_id成为必需的,来严格保证用户必须至少有一个地址。我也希望没有孤立的地址,因此也需要Address.user_id。在

class User(db.Model):
    __tablename__ = 'Users'
    id = Column(Integer, primary_key=True)
    primary_address_id = Column(Integer, ForeignKey('Addresses.id'), nullable=False)

    primary_address = relationship(Address, primaryjoin=primary_address_id == Address.id, foreign_keys=primary_address_id)
    addresses = relationship(Address, primaryjoin=id == Address.building_id, foreign_keys=Address.building_id)

class Address(db.Model):
    __tablename__ = 'Addresses'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('Users.id'), nullable=False)

当我尝试使用单个地址插入以下用户时,它失败了,因为primary_address_id为None。在

^{pr2}$

cursor.execute(statement, parameters) sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) null value in column "primary_address_id" violates not-null constraint [SQL: 'INSERT INTO "Users" (primary_address_id) VALUES (%(primary_address_id)s) RETURNING "Users".id'] [parameters: {'primary_address_id': None}] (Background on this error at: http://sqlalche.me/e/gkpj)

有没有一种方法可以避免SqlAlchemy和Postgres的鸡蛋问题,而不必使其中一个边为null?或者,有没有其他方法可以用同样的参考需求来建模?在


Tags: 用户iddbmodeladdress地址columninteger

热门问题