gpt4 book ai didi

python - 在 SQLAlchemy 中按名称建模

转载 作者:太空狗 更新时间:2023-10-30 01:59:32 26 4
gpt4 key购买 nike

是否可以从名称中获取 ORM 映射模型类?

肯定是 SQLAlchemy 在某个地方内置了这个功能。例如,在声明式风格中,您可以编写类似 blahs = relationship('Blah') 的内容(注意:不需要模块前缀)。我试着查看 sqlalchemy.orm.properties.RelationshipProperty 但无法弄清楚 argument 字符串何时被实际替换。

最佳答案

解析器不可公开访问;使用了 sqlalchemy.ext.declarative._deferred_relationship 函数,它有一个嵌套(隐藏)resolve_arg 函数。

该函数使用以下逻辑来解析名称:

def access_cls(key):
if key in cls._decl_class_registry:
return _GetColumns(cls._decl_class_registry[key])
elif key in cls.metadata.tables:
return cls.metadata.tables[key]
elif key in cls.metadata._schemas:
return _GetTable(key, cls.metadata)
else:
return sqlalchemy.__dict__[key]

其中 cls 是声明类(派生自 Base)。从代码中可以看出,解析名称的一种方法是使用 cls._decl_class_registry 结构,给定一个类 Foo,您可以解析字符串 'Blah' 到使用 Foo._decl_class_registry['Blah'] 的类。

._decl_class_registry 结构只是一个 python dict;您还可以在创建 Base 类时指定自己的映射器:

class_registry = {}
Base = declarative_base(class_registry=class_registry)

然后您可以直接在class_registry 映射中查找类。

关于python - 在 SQLAlchemy 中按名称建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com