()
或者,SQLAlchemy似乎不支持反向 工程 </跨度> 特征 </跨度> 或者,但确实需要像这样的架构:
user =表(‘用户’,元数据, 列(‘user_id’,Integer,primary_key’在数据库已存在时转发。
一个允许反向的ORM 工程 </跨度> 是:
http://docs.doctrine-project.org/en/2.0.x/reference/tools.html
是否有类似的逆转 工程 </跨度> Storm或SQLAlchemy或任何python ORM或python数据库fancyfier的工具? 鈥
我不知道Storm如何管理这个过程,但你当然可以反映数据库中的表 的 SQLAlchemy的 强> 。例如,下面是使用我目前可以访问的SQL Server实例的基本示例。
的 一个完整的数据库 强>
>>> from sqlalchemy import create_engine, MetaData >>> engine = create_engine('mssql+pyodbc://<username>:<password>@<host>/<database>') # replace <username> with user name etc. >>> meta = MetaData() >>> meta.reflect(bind=engine) >>> funds_table = meta.tables['funds'] # tables are stored in meta.tables dict >>> funds_table # now stores database schema object Table(u'funds', MetaData(bind=None), Column(u'fund_token', INTEGER(), table=<funds>, primary_key=True, nullable=False), Column(u'award_year_token', INTEGER(), ForeignKey(u'award_year_defn.award_year_token'), table=<funds>, nullable=False), ... Column(u'fin_aid_disclosure_category', VARCHAR(length=3, collation=u'SQL_Latin1_General_CP1_CI_AS'), table=<funds>), Column(u'report_as_additional_unsub', BIT(), table=<funds>, server_default=DefaultClause(<sqlalchemy.sql.expression.TextClause object at 0x000000000545B6D8>, for_update=False)), schema=None)
如果您只想一次反映一个表,则可以使用以下代码。
的 一次一张桌子 强> (快多了)
>>> from sqlalchemy import Table, create_engine, MetaData >>> engine = create_engine('mssql+pyodbc://<username>:<password>@<host>/<database>') >>> meta = MetaData() >>> funds_table = Table('funds', meta, autoload=True, autoload_with=engine) # indicate table name (here 'funds') with a string passed to Table as the first argument >>> funds_table # now stores database schema object Table(u'funds', MetaData(bind=None), Column(u'fund_token', INTEGER(), table=<funds>, primary_key=True, nullable=False), Column(u'award_year_token', INTEGER(), ForeignKey(u'award_year_defn.award_year_token'), table=<funds>, nullable=False), ... Column(u'fin_aid_disclosure_category', VARCHAR(length=3, collation=u'SQL_Latin1_General_CP1_CI_AS'), table=<funds>), Column(u'report_as_additional_unsub', BIT(), table=<funds>, server_default=DefaultClause(<sqlalchemy.sql.expression.TextClause object at 0x000000000545B6D8>, for_update=False)), schema=None)
您可以想象,然后您可以保存相关表格的数据,以便将来更快地访问表格。