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
精彩评论