我们正在尝试为我们的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,同时仍然允许从前端的这个功能?
非常感谢!所有建议将不胜感激。
答案 0 :(得分:5)
我不确定我是否遵循,但一般的SQL-Alchemy用法如下:
results = db.session.query(User).filter(User.name == "Bob").order_by(User.age.desc()).limit(10)
这将查询User表以返回名为“Bob”的前十名最老的成员