3

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

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

例子:

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)

已请求两个查询,产生以下 dicts:

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”还不够强大,无法自己解决。:)

4

2 回答 2

1

尝试以下操作,参考这里:Query , filter_by

session.query(User).filter_by(**q1_dict)
于 2011-07-16T17:18:17.957 回答
0

一些示例代码:

100         COND = and_()
.....
216         if hidxs_sg:$
217             clause = [AM.hidx == hidx for hidx in hidxs_sg]$
218             COND.append(or_(*clause))$
....
300         query = session.query(AM).filter(COND)$

关键是使用 and_() 创建一个 AND 条件并将单个表达式添加到条件中......

于 2011-07-16T16:59:34.013 回答