在sqlalchemy查询中使用变量

时间:2017-07-14 01:01:06

标签: python sqlalchemy

我正在尝试在sqlalchemy中形成一个查询但不确定如何实现这一目标。我希望能够在我的查询中使用该变量

 dog_type = 'pug'
 dog_name = 'buddy'
 .filter (animal.dogs.pug == 'buddy')

这就是我想要的样子:

.filter (animal.dogs.<dog_type> == <dog_name>)

在研究这个问题的同时,我找到了一些方法来做类似的事情。

  1. 使用kwargs作为过滤器参数
  2. 像这样使用getattr:

    .filter(getattr(animal, dogs) == 'buddy') 
    
  3. 但是这两个选项似乎都不适合我的情况或至少我尝试过。那么任何建议怎么办呢?

2 个答案:

答案 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)
相关问题