cap*_*eus 8 python mysql sqlalchemy relationship automap
我是sqlalchemy的新手.我已经按照教程创建了一个与mysql db关系的现有数据库的自动化
from sqlalchemy import create_engine, MetaData, Column, Table, ForeignKey
from sqlalchemy.ext.automap import automap_base, generate_relationship
from sqlalchemy.orm import relationship, backref
from config import constr, mytables
def _gen_relationship(base, direction, return_fn,
attrname, local_cls, refferred_cls, **kw):
return generate_relationship(base, direction, return_fn, attrname, local_cls, refferred_cls, **kw)
engine = create_engine(constr)
metadata = MetaData()
metadata.reflect(engine, only=mytables)
Base = automap_base(metadata=metadata)
Base.prepare(engine, reflect=True, generate_relationship=_gen_relationship)
Tableclass1 = Base.classes.table1
Tableclass2 = Base.classes.table2
Run Code Online (Sandbox Code Playgroud)
Table2.ID映射到其中一table1列.但是,当我试图使用查询和加入table1和table2,它报告错误,说"无法找到任何外键关系".既然我知道了这两个表的关系,那么在创建类实例之后是否可以声明这种关系?或者有没有办法在查询功能中明确告诉这种关系?谢谢!
您可以通过使用onclauseSQLAlchemyjoin方法的 join 参数显式地执行此操作。参数onclause的使用方式与 SQL 的 JOIN 类似,例如
sqlalchemy.orm.join(table1, table2, onclause=table2.ID == table1.your_attribute)
Run Code Online (Sandbox Code Playgroud)
您还可以通过简单地在类中声明外键来声明绕过数据库中外键的存在:
Column('ID', Integer, ForeighKey('table1.your_attribute'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2345 次 |
| 最近记录: |