我正在尝试在sqlalchemy中形成一个查询但不确定如何实现这一目标。我希望能够在我的查询中使用该变量
dog_type = 'pug'
dog_name = 'buddy'
.filter (animal.dogs.pug == 'buddy')
这就是我想要的样子:
.filter (animal.dogs.<dog_type> == <dog_name>)
在研究这个问题的同时,我找到了一些方法来做类似的事情。
像这样使用getattr:
.filter(getattr(animal, dogs) == 'buddy')
但是这两个选项似乎都不适合我的情况或至少我尝试过。那么任何建议怎么办呢?
答案 0 :(得分:0)
这是过滤器的工作原理。首先定义一个模型:
class Dog(Base):
__tablename__ = "dogs"
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
然后在您的代码中导入此类:
import Dog
然后您可以这样查询:
pugs = db_session.query(Dog).filter(Dog.name == "pug").all()
for pug in pugs:
print("I'm a pug in the database! I have ID " + str(pug.id))
答案 1 :(得分:0)
找出问题的解决方案。嵌套getattr解决了这个问题。
animal_type = 'dogs'
dog_type = 'pug'
dog_name = 'buddy'
.filter(getattr(getattr(animal, animal_type), dog_type) == dog_name)