2013-03-08 83 views
3

在爲已有數據庫編寫SQLAlchemy模型時,我必須提供多少關於表的信息?考慮一下這個表,它是MySQL數據庫的一部分:SQLAlchemy必要的表屬性

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,發動機和COLLATE信息。 SQLAlchemy關心這些嗎?

當然,我可以使用反射,但我寧願不是由於一致性的原因。

回答

3

下面應該語義產生相同的結果,但不會產生相同的查詢:

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) 

我只是不知道如何爲整個表指定歸類。

+2

可以指定這樣的歸類: '__table_args__ = { \t 'mysql_engine': 'InnoDB的', \t 'mysql_charset': 'UTF8', \t 'mysql_collat​​e': 'utf8_general_ci' }' 但問題是:sqlalchemy會照顧嗎?或者,如果表格已經存在,這沒有關係嗎? – 2013-07-17 16:37:15