我在SQLite 3中使用Python。我有用户输入SQL查询,需要格式化模板语言的结果。
所以,基本上,我需要使用DB API游标的说明(PEP 249),但我需要同时获取列名和表名,因为用户经常进行连接
显而易见的答案,即读取表定义,是不可能的 - 许多表具有相同的列名。
我还需要对列/表名称进行一些智能行为,以获得聚合函数,例如avg(field)...
我能想到的唯一解决方案是使用SQL解析器并分析SELECT语句(叹气),但我没有找到任何看起来非常好的Python SQL解析器?
我没有在文档中找到任何相关问题或其他任何有相同问题的人,所以我可能错过了一些明显的东西?
编辑:要清楚 - 问题是找到SQL select的结果,其中select语句由用户在用户界面中提供。我无法控制它。如上所述,读取表定义没有用。
答案 0 :(得分:1)
Python的DB API仅指定cursor.description的列名(此API的任何RDBMS实现都不会返回查询的表名...我将告诉您原因)。
你所要求的是非常困难的,甚至只有SQL解析器才能接近......即便如此,甚至有很多情况甚至是“Table”列的概念来自可能没什么意义。
考虑以下SQL语句:
哪个表格来自{<1}}
today
哪个表格来自{<1}}
SELECT DATE('now') AS today FROM TableA FULL JOIN TableB
ON TableA.col1 = TableB.col1;
哪个表格来自{<1}}
myConst
哪个表格来自{<1}}
SELECT 1 AS myConst;
上面是非常简单的SQL语句,你要么必须组成一个“表”,要么随意选择一个...... 即使你有一个SQL解析器!
SQL为您提供了一个数据集作为结果。此集合中的元素不一定归因于特定的数据库表。您可能需要重新考虑解决此问题的方法。