gpt4 book ai didi

python - sqlalchemy 获取同义词和关系的字段类型

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:30 26 4
gpt4 key购买 nike

我有一个 SQL Alchemy ORM,其中有常规列、同义词和关系。

class Table1(Base):
regular_field = Column("RegularField", Integer)
field = Column("TestField", String)
field_synonym = synonym('field')
relation_type = relationship("Table2", back_populates="Table1")

当我使用 session 从数据库检索对象时,如何循环返回的对象并返回没有同义词的常规字段、跳过有同义词的字段、同义词本身并跳过关系?所以对于上面的内容,它应该只返回

    regular_field, field_synonym

并跳过

    field (since it has a synonym called field_synonym) 
relation_type (which is a relationship).

我该怎么做?

最佳答案

您无法单独在实例上执行此操作,您需要查看类属性才能使其工作。如果您在类上查找具有相同名称的属性,您可以检查 type 或对类属性执行 isinstance 检查。

示例,假设您有一个 table1 实例

>>> table1.__class__.regular_field.__class__.__mro__
(sqlalchemy.orm.attributes.InstrumentedAttribute,
sqlalchemy.orm.attributes.QueryableAttribute,
sqlalchemy.orm.interfaces._MappedAttribute,
sqlalchemy.orm.interfaces._InspectionAttr,
sqlalchemy.orm.interfaces.PropComparator,
sqlalchemy.sql.operators.ColumnOperators,
sqlalchemy.sql.operators.Operators,
object)

然后您可以检查像这样的特定类

field = table1.__class__.field_synonym
if isinstance(field, sqlalchemy.orm.attributes.propertyProxy):
# overwriting vars is bad style, just for illustration purposes!
field = field.original_property

关于python - sqlalchemy 获取同义词和关系的字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47603418/

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