SQLAlchemy 0.5.5 - 定义表结构
我使用了 sqlautocode
工具来为一个现有的 MySQL 数据库生成了一个 model.py 文件,下面是一个表的例子:
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
这主要是个人风格的选择,但也和你的代码复杂程度有关。
如果你在写一个短小的、独立的脚本,而且这个脚本可能不会被其他地方引用,那么把很多名字放到你的命名空间里(比如 Table 和 Column)就没什么问题,这样反而让代码更容易阅读。
但如果你预计你的模块会很大,并且会被其他模块或第三方使用,那么你就要尽量保持命名空间的整洁。把 Table 和 MetaData 类放在一个单独的命名空间里,可以让它们更有条理,也更清晰。也就是说,如果你使用的是 schema 命名空间,你就能很清楚地知道
>>> schema.Table
指的是 schema 模块中的 Table,而不是其他地方定义的 Table。
否则,这些对象其实是完全一样的。
>>> from sqlalchemy import schema
>>> from sqlalchemy import Table
>>> Table is schema.Table
True