2009-11-15 2 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.Table, meta.metadata

ответ

1

Это в основном предпочтение стиль, но и зависит от того, насколько сложным ваш код.

Если вы пишете короткий изолированный сценарий, который, скорее всего, не будет импортирован в другое место, приносящее много имен в ваше пространство имен (например, таблица, столбец), не является проблемой и упрощает чтение кода.

Если, с другой стороны, вы ожидаете, что ваш модуль будет большим и будет импортирован другими модулями или третьими лицами, вы хотите, чтобы пространство имен было максимально чистым. Наличие классов Table и MetaData в отдельном пространстве имен сохраняет их организованными и четко охваченными. То есть, если вы используете пространство имена схемы, вы можете четко сказать, что

>>> schema.Table 

относится к таблице в модуле схемы, а не другая таблица определена в другом месте.

В противном случае объекты будут точно такими же.

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

В моем случае это в скрипте 'model/__ init __. Py', используемом в приложении« Pylons », поэтому я должен его префикс. –

Смежные вопросы