gpt4 book ai didi

python - 声明类的 SQLAlchemy 自省(introspection)

转载 作者:太空狗 更新时间:2023-10-29 21:38:23 29 4
gpt4 key购买 nike

我正在编写一个小的 sqlalchemy shim 以通过一些轻量级数据转换从 MySQL 数据库中导出数据——主要是更改字段名称。我当前的脚本工作正常,但需要我基本上描述我的模型两次——一次在类声明中,一次作为要迭代的字段名称列表。

我正在尝试弄清楚如何使用内省(introspection)来识别作为列访问器的行对象的属性。以下工作几乎完美:

for attr, value in self.__class__.__dict__.iteritems():
if isinstance(value, sqlalchemy.orm.attributes.InstrumentedAttribute):
self.__class__._columns.append(attr)

除了我的对多关系访问器也是 sqlalchemy.orm.attributes.InstrumentedAttribute 的实例,我需要跳过这些。在检查类字典时,有什么方法可以区分两者吗?

我在 sqlalchemy 内省(introspection)中找到的大部分文档都涉及查看 metadata.table,但由于我正在重命名列,因此该数据无法简单地映射。

最佳答案

每个映射实体的映射器都有一个属性columns,其中包含所有列定义。例如,如果您有一个声明类 User,您可以使用 User.__mapper__ 和列访问映射器:

list(User.__mapper__.columns)

每一列都有几个属性,包括name(可能与名为key的映射属性相同)、nullableunique 等等...

关于python - 声明类的 SQLAlchemy 自省(introspection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380209/

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