开发者

SQLAlchemy 0.5.5 - defining table schema

I used sqlautocode to generate a model.py for an existing MySQL database and here's a table example:

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_unico开发者_高级运维de=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),


    )

Some of the examples I've seen prefixed the Column, Integer() and other similar datatypes with schema that's imported from sqlalchemy. Should I import Column and the rest individually, such as:

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

Or should I always prefix them?

schema.Table, meta.metadata


It's largely a style preference, but also depends on how complex your code is.

If you're writing a short, isolated script that will likely not be imported elsewhere, bringing lots of names into your namespace (i.e. Table, Column) isn't a problem and makes the code easier to read.

If, on the other hand, you expect your module to be large and imported by other modules or third parties, you want to keep you namespace as clean as possible. Having the Table and MetaData classes in a separate namespace keeps them organized and clearly scoped. That is, if you're using the schema namespace, you can clearly tell that

>>> schema.Table

refers to the Table in the schema module and not another Table defined elsewhere.

Otherwise, the objects are exactly the same.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜