【发布时间】:2020-08-22 06:02:04
【问题描述】:
我正在使用一个数据库,我们已选择使用外部工具来管理架构,并且正在远离 python 进行架构管理。当然,我们的 SQLALchemy ORM 模型仍然存在,我现在想知道它们中包含的大部分信息是否在我们的代码库中有效。我们在模型上定义了 cmets、约束、索引(其中一些不再同步)。进行查询时是否会以任何方式使用此信息?
编辑:
社区已经明确(有充分理由)这个问题需要更有针对性,所以这里有一个表格模型的具体示例和一些具体的“子问题”。
class FileRecord(Base):
__tablename__ = 'science_file'
# Table fields
file_id = Column(Integer, primary_key=True, autoincrement=True)
filename = Column(String, nullable=False, unique=True,
comment='File name, unique by date and version')
file_date = Column(DateTime,
comment='Date parsed from file name')
file_version = Column(Integer,
comment='Version parsed from file name')
ingest_complete = Column(Boolean, nullable=False, default=False,
comment='All packets in the file successfully ingested')
ingested_at = Column(DateTime, default=datetime.utcnow,
comment='Timestamp when file was ingested')
# Relationships
science_packets = relationship("SciencePacket",
secondary="sci_pkt_jt", backref=backref("files", lazy='joined'))
stim_packets = relationship("StimPacket",
secondary="stim_pkt_jt", backref=backref("files", lazy='joined'))
__table_args__ = (UniqueConstraint('file_date', 'file_version'),)
问题
-
__table_args__包含一个唯一约束(也可以包含一个索引,例如)。这是在操作对象实例时使用,还是仅在使用 SQLAlchemy 管理数据库时有用? -
ingest_complete在模型中有nullable=False约束。如果数据库强制执行,这是否必要?在尝试持久化实例之前是否对模型进行了“预检查”,或者这种语法仅在使用 SQLAlchemy/Alembic 管理数据库时有用? - 对于模型定义的哪些部分有用/没有用,是否有更通用的规则?例如
primary_key在模型定义中绝对是必需的,但UniqueConstraint似乎没有在 Alembic 模式管理之外使用。
【问题讨论】:
-
嘿模组,我有兴趣把这个问题变成更好的形式。我做了一些编辑。如果您仍然认为它不够专注,请给我一些指导,告诉我我可以做些什么来改进它。
标签: python sqlalchemy alembic