Cox*_*oxy 5 python orm sqlalchemy
我偶尔会发现自己有一个表对象(例如由 检索Metadata.tables)并且想要获取 Mapper 对象,该对象定义了从某个用户定义的类到表的映射(然后最终是映射的类)
在上下文中,我有:
一个sqlalchemy.schema.Table对象;
一个sqlalchemy.schema.MetaData对象;
甲sqlalchemy.orm.session.Session表示当前会话对象。
我想要的是sqlalchemy.orm.mapper.Mapper定义用户定义的类和Table上面的对象之间的映射的对象。我找不到通过文档或检查这些对象及其可用方法来获取此信息的方法。有没有办法做到这一点?
SQLAlchemy-utils有一个名为 的函数get_mapper:
为给定的 SQLAlchemy 对象返回相关的 SQLAlchemy Mapper。
该函数将接受许多不同类型的对象,测试它是什么,然后执行返回映射器所需的逻辑。
如果您纯粹是想从表中获取映射器,那么这是一个受其源代码启发的函数,而没有它们所做的任何类型检查/处理get_mapper:
from sqlalchemy.orm import mapperlib
def find_table_mapper(tbl):
mappers = [
mapper for mapper in mapperlib._mapper_registry
if tbl in mapper.tables
]
if len(mappers) > 1:
raise ValueError(
"Multiple mappers found for table '%s'." % tbl.name
)
elif not mappers:
raise ValueError(
"Could not get mapper for table '%s'." % tbl.name
)
else:
return mappers[0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |