SQLAlchemy必需的表属性

时间:2013-03-08 14:21:58

标签: 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;

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

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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)

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

答案 1 :(得分:0)

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