我偶尔会遇到这样的情况:我有一个表对象(例如由reg.out <- lapply(1:nrow(dt), function(i) {
reg.mets <- withTimeout(
tryCatch(
1 * dt$dim1[i]),
error = function(e) NULL),
timeout = 60,
onTimeout = "silent")
})
检索到),并且想要获得Mapper对象,该对象定义了从某些用户定义的类到Table的映射(并且然后最终是映射的类)
在上下文中,我有:
一个Metadata.tables
对象;
一个sqlalchemy.schema.Table
对象;
表示当前会话的sqlalchemy.schema.MetaData
对象。
我想要的是sqlalchemy.orm.session.Session
对象,该对象定义了用户定义的类和上面的sqlalchemy.orm.mapper.Mapper
对象之间的映射。我找不到通过文档或通过检查这些对象及其可用方法来实现此目的的方法。有什么办法吗?
答案 0 :(得分:2)
SQLAlchemy-utils具有一个名为get_mapper
的功能:
为给定的SQLAlchemy对象返回相关的SQLAlchemy映射器。
该函数将接受许多不同类型的对象,测试它是什么,然后执行返回映射器所需的逻辑。
如果您纯粹是从表中获取映射器,则此功能是从其source code启发而来的,而没有他们在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]