SQLAlchemy表定义的哪些部分仅用于迁移Alembic与实例处理?

问题描述

我正在使用一个数据库,在该数据库中,我们选择使用外部工具来管理模式,并且不再使用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'),)

问题

  1. __table_args__包含一个唯一约束(也可以包含一个索引)。是在操作对象实例时使用此方法,还是仅在使用sqlAlchemy管理数据库时才有用?
  2. ingest_complete在模型中具有nullable=False约束。如果数据库强制执行此操作是否必要?在尝试保留实例之前是否对模型进行了“预检查”,或者仅当使用sqlAlchemy / Alembic管理数据库时,此语法才有用吗?
  3. 对于模型定义的哪些部分有用/无用的规则是否更普遍?例如primary_key在模型定义中绝对必要,但是UniqueConstraint似乎不在Alembic模式管理之外使用。

解决方法

该数据是不必要的,因为您使用的数据库具有与python代码不同的架构。数据库模式由从您的python代码生成数据库的工具进行外部管理。因此,您不需要Python代码即可拥有数据库架构所拥有的所有信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...