问题描述
我正在使用一个数据库,在该数据库中,我们选择使用外部工具来管理模式,并且不再使用python来进行模式管理。当然,我们的sqlALchemy ORM模型仍然存在,我现在想知道它们所包含的许多信息是否在我们的代码库中有效存在。我们有在模型上定义的注释,约束,索引(其中一些不再同步)。进行查询时是否以任何方式使用此信息?
编辑:
社区已经明确(有充分的理由)需要更直接地指导这个问题,所以这里有一个Table模型的特定示例和一些特定的“子问题”。
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,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",lazy='joined'))
__table_args__ = (UniqueConstraint('file_date','file_version'),)
问题
-
__table_args__
包含一个唯一约束(也可以包含一个索引)。是在操作对象实例时使用此方法,还是仅在使用sqlAlchemy管理数据库时才有用? -
ingest_complete
在模型中具有nullable=False
约束。如果数据库强制执行此操作是否必要?在尝试保留实例之前是否对模型进行了“预检查”,或者仅当使用sqlAlchemy / Alembic管理数据库时,此语法才有用吗? - 对于模型定义的哪些部分有用/无用的规则是否更普遍?例如
primary_key
在模型定义中绝对必要,但是UniqueConstraint
似乎不在Alembic模式管理之外使用。
解决方法
该数据是不必要的,因为您使用的数据库具有与python代码不同的架构。数据库模式由从您的python代码生成数据库的工具进行外部管理。因此,您不需要Python代码即可拥有数据库架构所拥有的所有信息。