gpt4 book ai didi

SQLAlchemy:当 hybrid_property 时,mapper has_property 方法如何返回 True

转载 作者:行者123 更新时间:2023-12-05 03:14:26 27 4
gpt4 key购买 nike

当我尝试按名称从映射器获取属性时,如果指定了 hybrid_property 名称,我将无法执行此操作。

import datetime
from sqlalchemy import create_engine, MetaData
from sqlalchemy import Column, String, DateTime, Integer
from sqlalchemy.ext.declarative import declarative_base, declared_attr
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import sessionmaker

metadata = MetaData()
Base = declarative_base(metadata=metadata)

class Duration(Base):
__tablename__ = "duration"

pk = Column(Integer, primary_key=True)
name = Column(String, nullable=False)

@hybrid_property
def duration(obj):
return obj.name

engine = create_engine('sqlite:///:memory:', echo=True)
metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

duration = Duration(name="Test")
session.add(duration)
session.commit()

print duration.__mapper__.has_property('duration') # Returns False, needs True

如您所见,has_property('duration') 没有看到 hybrid_property 持续时间并返回 False 而不是 True。

可以建议什么解决方案?

最佳答案

虽然这里的命名质量不佳,但混合不是 MapperProperty,映射器将其视为“属性”。为了适应用户想要查看所有特定于 ORM 的类成员的用例,而不仅仅是 MapperProperty,我们有 all_orm_descriptors :

print "duration" in duration.__mapper__.all_orm_descriptors

关于SQLAlchemy:当 hybrid_property 时,mapper has_property 方法如何返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579185/

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