为预先存在的数据库编写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,但由于一致性原因,我宁愿不这样做。
答案 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