小编QBa*_*man的帖子

backref类属性

如何在没有通过会话的某些查询的情况下初始化映射器的backref?例如,我有两个模型,在以下代码中命名为"Client"和"Subject":

Base = declarative_base()

class Client(Base):
    __tablename__ = "clients"

    id = Column(Integer, primary_key=True)
    created = Column(DateTime, default=datetime.datetime.now)
    name = Column(String)

    subjects = relationship("Subject",  cascade="all,delete",
        backref=backref("client"))


class Subject(Base):
    __tablename__ = "subjects"

    id = Column(Integer, primary_key=True)
    client_id = Column(Integer, ForeignKey(Client.id, ondelete='CASCADE'))
Run Code Online (Sandbox Code Playgroud)

然后,在我的代码中的某个地方,我想得到这样client的类的backref Subject,但这引发了一个异常:

>>> Subject.client
AttributeError: type object 'Subject' has no attribute 'client'
Run Code Online (Sandbox Code Playgroud)

在查询后Client喜欢:

>>> session.query(Client).first()
>>> Subject.client
<sqlalchemy.orm.attributes.InstrumentedAttribute at 0x43ca1d0>
Run Code Online (Sandbox Code Playgroud)

client在查询相关模型(映射器)之后创建属性.
我不想做这样的"变暖"查询!

python sqlalchemy

5
推荐指数
2
解决办法
817
查看次数

标签 统计

python ×1

sqlalchemy ×1