SQLAlchemy:限制在与where相同的字符串中

时间:2013-01-22 00:48:13

标签: python sql postgresql sqlalchemy

我们正在尝试为我们的Web应用程序启用SQL查询前端,这是WSGI并使用Python,使用SQLAlchemy(核心,而不是ORM)来查询PostgreSQL数据库。我们设置了几个数据层函数来帮助构建查询,我们现在尝试设置允许这种类型查询的内容:

select id from <table_name> where ... limit ...

在前端,我们有一个文本框,允许用户输入where子句和limit子句,以便可以从前端灵活地动态查询数据,也就是说,我们要启用< em> ad hoc 查询。所以,我们现在唯一要做的就是:

select id from <table_name>

用户将输入,例如:

where date > <some_date>
where location is not null limit 10 order by location desc

使用相同的后端功能。 select,column和table应该由数据层管理(即它知道它们是什么,用户不需要知道它)。但是,我不知道让SQLAlchemy自动解析where子句和limit子句的任何方法。我们现在拥有的是一个函数,它可以返回表名和id列的名称,然后使用它来创建一个文本查询,该查询传递给SQLAlchemy,作为text()调用的输入。

有什么方法可以用SQLAlchemy或其他一些库来做到这一点?或者有一个更好的模式,我应该知道,这不涉及解析SQL,同时仍然允许从前端的这个功能?

非常感谢!所有建议将不胜感激。

1 个答案:

答案 0 :(得分:5)

我不确定我是否遵循,但一般的SQL-Alchemy用法如下:

 results = db.session.query(User).filter(User.name == "Bob").order_by(User.age.desc()).limit(10)

这将查询User表以返回名为“Bob”的前十名最老的成员