9

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

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

在前端,我们有一个文本框,让用户输入 where 子句和 limit 子句,这样就可以从前端灵活动态地查询数据,也就是我们要启用即席查询。所以,我们现在唯一的第一手资料是:

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,同时仍然允许来自前端的此功能?

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

4

1 回答 1

7

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

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

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

于 2013-01-22T01:52:27.203 回答