SQLAlchemy必需的表属性

Gev*_*aul 8 mysql reflection sqlalchemy create-table

在为预先存在的数据库编写SQLAlchemy模型时,我必须提供多少关于表的信息?考虑这个表是MySQL数据库的一部分:

CREATE TABLE entities (
    id INTEGER NOT NULL AUTO_INCREMENT,
    dn VARCHAR(100) NOT NULL UNIQUE,
    PRIMARY KEY (id)
) Engine=InnoDB, COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

根据我的测试,这足以使用它:

class Entity(Base):
    __tablename__ = 'entities'
    id          = Column('id', Integer, primary_key=True)
    dn          = Column('dn', String(100))
Run Code Online (Sandbox Code Playgroud)

但当然它缺少UNIQUE,AUTO_INCREMENT,Engine和COLLATE信息.SQLAlchemy是否关心这些?

当然我可以使用Reflection,但由于一致性原因,我宁愿不这样做.

van*_*van 11

下面应该在语义上产生相同的结果,虽然不会产生相同的查询:

class Entity(Base):
    __tablename__ = 'entities'
    __table_args__ = {'mysql_engine':'InnoDB'}
    id          = Column('id', Integer, primary_key=True)
    dn          = Column('dn', String(100, collation='utf8_unicode_ci'), unique=True)
Run Code Online (Sandbox Code Playgroud)

我只是不确定如何为整个表指定排序规则.

  • 您可以像这样指定排序规则:`__ table_args__ = {'mysql_engine':'InnoDB','mysql_charset':'utf8','mysql_collat​​e':'utf8_general_ci'}`但问题是:sqlalchemy会关心吗?如果表已经存在,那不重要吗? (11认同)