我使用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
答案 0 :(得分:1)
这主要是一种风格偏好,但也取决于代码的复杂程度。
如果您正在编写一个可能无法在其他地方导入的简短孤立脚本,那么将大量名称放入您的命名空间(即表,列)不是问题,并且使代码更易于阅读。
另一方面,如果您希望您的模块很大并且由其他模块或第三方导入,您希望尽可能保持名称空间的清洁。将Table和MetaData类放在一个单独的命名空间中可以使它们保持井井有条和明确的范围。也就是说,如果您正在使用架构命名空间,则可以清楚地告诉
>>> schema.Table
指模式模块中的表,而不是其他地方定义的另一个表。
否则,对象完全相同。
>>> from sqlalchemy import schema
>>> from sqlalchemy import Table
>>> Table is schema.Table
True