2009-11-15 42 views
0

我以前sqlautocode生成一个model.py对现有的MySQL数据库,这里是一个表例如:SQLAlchemy的0.5.5 - 定义表模式

fusion_articles = Table('fusion_articles', metadata, 
    Column(u'article_id', Integer(), primary_key=True, nullable=False), 
      Column(u'article_cat', Integer(), primary_key=False, nullable=False), 
      Column(u'article_subject', String(length=200, convert_unicode=False, assert_unicode=None), primary_key=False, nullable=False), 
      Column(u'article_snippet', Text(length=None, convert_unicode=False, assert_unicode=None), primary_key=False, nullable=False), 
      Column(u'article_article', Text(length=None, convert_unicode=False, assert_unicode=None), primary_key=False, nullable=False), 
      Column(u'article_breaks', CHAR(length=1, convert_unicode=False, assert_unicode=None), primary_key=False, nullable=False), 
      Column(u'article_name', Integer(), primary_key=False, nullable=False), 
      Column(u'article_datestamp', Integer(), primary_key=False, nullable=False), 
      Column(u'article_reads', Integer(), primary_key=False, nullable=False), 
      Column(u'article_allow_comments', Boolean(), primary_key=False, nullable=False), 
      Column(u'article_allow_ratings', Boolean(), primary_key=False, nullable=False), 


    ) 

一些我见过的前缀Column的例子, Integer()和其他具有类似schema数据类型这是一个从sqlalchemy进口。我应该导入Column和单独的休息,如:

>>> from sqlalchemy import Table, Column, Integer, String, MetaData 
>>> metadata = MetaData() 

或者我应该始终前缀呢?

schema.Tablemeta.metadata

回答

1

这在很大程度上是一种风格偏好,但也要看你的代码的复杂程度。

如果你正在编写,将可能不会在其他地方进口,带来很多的名称到您的命名空间(即表,列)短的,孤立的脚本是不是一个问题,使代码更易于阅读。

如果,另一方面,你希望你的模块要大,并通过其他模块或第三方进口的,你要保持你命名空间尽可能干净。将Table和MetaData类放在一个单独的名称空间中,可以使它们组织起来并明确限定范围。也就是说,如果你使用的架构命名空间,你可以清楚地告诉大家,

>>> schema.Table 

指表的模式模块中,而不是另一个表别处定义。

否则,对象是完全一样的。

>>> from sqlalchemy import schema 
>>> from sqlalchemy import Table 
>>> Table is schema.Table 
True 
+0

在我的情况下,这是在'Pylons'应用程序中使用的'model/__ init __。py'脚本,我想我应该在它的前缀。 – 2009-11-15 12:12:49