Skip to main content
 首页 » 编程设计

python之SQLAlchemy(ORM,声明式): How to build query from key/values in a dict

2025年05月04日24oomusou

使用 SQLAlchemy ORM(声明式),如何以编程方式根据字典中的一组条件创建查询?

我希望在 users 表中搜索那些符合先前在字典中收集的某些条件的记录。我无法事先知道将使用哪些字段,并且必须能够处理一些字段是整数,一些是字符串,可以有很多不同的字段等。

例子:

from sqlalchemy import Column, Integer, String 
from sqlalchemy.ext.declarative import declarative_base 
 
Base = declarative_base() 
class User(Base): 
    __tablename__ = 'users' 
 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 
    email = Column(String) 

请求了两个查询,结果如下:

q1_dict = {'id' : 177} 
 
q2_dict = {'name' : 'Johnny', 'email' : 'johnny@somewhere.com'} 

是否有任何简单/通用的方法可以从这两个字典创建我的查询,仅依赖于键与 User 类的属性相匹配的事实,同时正确处理类型,自动转义不安全值等?

我花了几个小时在谷歌上搜索这个,并浏览了 SQLAlchemy 文档,但似乎找不到任何好的答案/示例。

解决方案:

所以,在你们的帮助下,解决方案似乎很简单:

User.query.filter_by(**q1_dict) 
 
User.query.filter_by(**q2_dict) 

...获取示例中所需的两个查询。

dagoof,我已经查看了您提供的链接,但我想我的“python”还不够强大,无法自行解决问题。 :)

请您参考如下方法:

尝试以下操作,引用此处:Query , filter_by

session.query(User).filter_by(**q1_dict)