gpt4 book ai didi

python - 在 sqlalchemy 中绑定(bind)关系时分配变量

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:32 24 4
gpt4 key购买 nike

我有以下两个类:

class user(Base):
....
id=Column(Integer, primary_key=True)
address=relationship('Address',backref='user')

class Address(Base):
...
IsItAssgined=False
user_id=Column(Integer, ForeignKey('user.id'))

让我们创建这些类的两个实例:

Addr=Address()
Tom=User()

我想要以下行为:将地址附加到用户后,地址中的字段 IsItAssigned 更新为 True,即

Tom.address.append(Addr)
print Addr.IsItAssigned
-> to be True

如果可能的话,我不知道如何在这里使用描述符。

最佳答案

我会为此使用一个属性,一个测试 user_id 列是否不为 NULL 的属性。 column_property()在这里似乎很合适:

from sqlalchemy.orm import column_property

class Address(Base):
...
user_id = Column(Integer, ForeignKey('user.id'))
IsItAssigned = column_property(user_id != None)

现在 IsItAssigned 将是 TrueFalse。或者,使用 hybrid property :

from sqlalchemy.ext.hybrid import hybrid_property

class Address(Base):
...
user_id = Column(Integer, ForeignKey('user.id'))

@hybrid_property
def IsItAssigned(self):
return self.user_id != None

混合属性还具有可用于查询的优点。最后但同样重要的是,对于这种情况,也许一个普通的属性也可以,但它只适用于已经加载的实例:

class Address(Base):
...
user_id = Column(Integer, ForeignKey('user.id'))

@property
def IsItAssigned(self):
return self.user_id is not None

不过,我会使用不同的名称。 assigned 可能更好; Python style guide (PEP 8)提倡方法和实例属性的 lower_case_with_underscores

关于python - 在 sqlalchemy 中绑定(bind)关系时分配变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030169/

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