如果总是期望数据库中该列的外键,您是否将外键设置为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')
答案 0 :(得分:2)
您无需session.commit()
来获取ID; session.flush()
会这样做。
更好的是,如果您设置关系,则根本不需要获取ID,因为SQLalchemy将确定执行INSERT
的顺序。您可以这样做:
loc = Location(city="NYC", hotels=[Hotel(name="Hilton")])
session.add(loc)
session.commit()
它会正常工作。
答案 1 :(得分:0)
我建议你最好不要设置nullable = False。在很多情况下使外键可空可以很合理。例如,在您的方案中,如果我要插入当前位置不确定的酒店,则无法使用外键非空来完成此操作。因此,使用外键时的最佳做法是将其设置为可空。
查看必要的可以为空的外键Any example of a necessary nullable foreign key?