8

在为预先存在的数据库编写 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;

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

class Entity(Base):
    __tablename__ = 'entities'
    id          = Column('id', Integer, primary_key=True)
    dn          = Column('dn', String(100))

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

当然我可以使用反射,但出于一致性原因我宁愿不使用。

4

2 回答 2

10

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

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)

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

于 2013-03-09T20:25:45.710 回答
1
class Users(db.Model):
    __tablename__='users'
    __table_args__ = {'mysql_engine':'InnoDB', 'mysql_charset':'utf8','mysql_collate':'utf8_czech_ci'}
    id=db.Column('iduser', db.Integer, primary_key=True)
    name=db.Column('column_name', db.String(193))

    def __init__(self, name):
        self.name=name

    def __repr__(self):
        return self.name
于 2020-10-05T20:07:43.903 回答