python - 将外键设置为 nullable=false?

标签 python sqlalchemy foreign-keys

如果总是希望数据库中的该列有外键,您是否将外键设置为 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/

相关文章:

python 子类

python - 从父类(super class)实例化子类

Django 获取模型的所有外键名称

python - 如何使用 datashader 为图表的节点着色?

python - Pandas GroupBy计算满足一定条件的加权百分比

python - 使用 SqlAlchemy 执行原始查询(在 SQL-Server 数据库和 Pymssql 上)时,传递的参数无法识别并引发 SQL 错误

mysql - 我应该将排序键字段与外键结合索引,还是单独索引(mysql)?

mysql - 为什么外键不更新?

python - sqlalchemy 过滤连接模型属性的结果

python - 在sqlalchemy中使用column_property包括整数列