如果总是希望数据库中的该列有外键,您是否将外键设置为 nullable=false
?
我正在使用 sqlalchemy 并使用所需的外键设置我的模型。这有时会导致我更频繁地运行 session.commit()
,因为我需要父模型有一个 id 并被完全创建,以便在 ORM 中构建一个子对象。什么被认为是最佳实践?我的模型如下:
class Location(Base):
__tablename__ = 'locations'
id = Column(Integer, primary_key=True)
city = Column(String(50), nullable=False, unique=True)
hotels = relationship('Hotel', back_populates='location')
class Hotel(Base):
__tablename__ = 'hotels'
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False, unique=True)
phone_number = Column(String(20))
parking_fee = Column(String(10))
location_id = Column(Integer, ForeignKey('locations.id'), nullable=False)
location = relationship('Location', back_populates='hotels')
最佳答案
您不需要执行 session.commit()
来获取 ID; session.flush()
就可以了。
更好的是,如果设置关系,则根本不需要获取 ID,因为 SQLalchemy 会计算出执行 INSERT
的顺序。您可以简单地执行以下操作:
loc = Location(city="NYC", hotels=[Hotel(name="Hilton")])
session.add(loc)
session.commit()
它会正常工作。
关于python - 将外键设置为 nullable=false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39419762/