SQLAlchemy 0.5.5 - определение схемы таблицы - PullRequest
0 голосов
/ 15 ноября 2009

Я использовал sqlautocode для генерации model.py для существующей базы данных MySQL, а вот пример таблицы:

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 Ответ

1 голос
/ 15 ноября 2009

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

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

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

>>> schema.Table

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

В остальном объекты точно такие же.

>>> from sqlalchemy import schema
>>> from sqlalchemy import Table
>>> Table is schema.Table
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...