Python 在sqlalchemy查询中使用变量

Python 在sqlalchemy查询中使用变量,python,sqlalchemy,Python,Sqlalchemy,我试图在sqlalchemy中形成一个查询,但不确定如何实现这一点。我希望能够在查询中使用该变量 dog_type = 'pug' dog_name = 'buddy' .filter (animal.dogs.pug == 'buddy') 这就是我想要的: .filter (animal.dogs.<dog_type> == <dog_name>) 然而,这两种选择似乎都不适合我的情况,或者至少不适合我的尝试。那么有什么建议可以这样做吗 这就是过滤器的工作

我试图在sqlalchemy中形成一个查询,但不确定如何实现这一点。我希望能够在查询中使用该变量

 dog_type = 'pug'
 dog_name = 'buddy'
 .filter (animal.dogs.pug == 'buddy')
这就是我想要的:

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

然而,这两种选择似乎都不适合我的情况,或者至少不适合我的尝试。那么有什么建议可以这样做吗

这就是过滤器的工作原理。首先定义一个模型:

class Dog(Base):
    __tablename__ = "dogs"

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
然后在代码中导入此类:

import Dog
然后您可以这样查询它:

.filter(getattr(animal, dogs) == 'buddy') 
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))

这就是过滤器的工作原理。首先定义一个模型:

class Dog(Base):
    __tablename__ = "dogs"

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
然后在代码中导入此类:

import Dog
然后您可以这样查询它:

.filter(getattr(animal, dogs) == 'buddy') 
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))

找到了解决我问题的办法。嵌套getattr解决了这个问题

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

找到了解决我问题的办法。嵌套getattr解决了这个问题

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

谢谢你的回答,但我实际上正在处理一些预先存在的代码,我不想改变它的结构。难道我不能做像
animal.dogs.==而不必对类和对象进行任何更改?另外,我当前运行的查询工作正常,但我希望能够在查询中使用变量。请发布完整的数据模型,然后我可以尝试帮助您。在看到定义动物和狗的类或实例之前,我猜不出它们是什么。谢谢你的回答,但我实际上正在处理一些预先存在的代码,我不想改变它的结构。难道我不能做像
animal.dogs.==而不必对类和对象进行任何更改?另外,我当前运行的查询工作正常,但我希望能够在查询中使用变量。请发布完整的数据模型,然后我可以尝试帮助您。在看到定义动物和狗的类或实例之前,我无法猜测它们是什么。