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

Jua*_*oto 8 python sql postgresql sqlalchemy

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

select id from <table_name> where ... limit ...
Run Code Online (Sandbox Code Playgroud)

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

select id from <table_name>
Run Code Online (Sandbox Code Playgroud)

用户将键入,例如:

where date > <some_date>
where location is not null limit 10 order by location desc
Run Code Online (Sandbox Code Playgroud)

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

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

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

rep*_*cus 5

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

 results = db.session.query(User).filter(User.name == "Bob").order_by(User.age.desc()).limit(10)
Run Code Online (Sandbox Code Playgroud)

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