我可以使用Python DB API中的.description()获取表名和列名吗?

时间:2012-03-27 14:39:47

标签: python python-db-api

我在SQLite 3中使用Python。我有用户输入SQL查询,需要格式化模板语言的结果。

所以,基本上,我需要使用DB API游标的说明(PEP 249),但我需要同时获取列名表名,因为用户经常进行连接

显而易见的答案,即读取表定义,是不可能的 - 许多表具有相同的列名。

我还需要对列/表名称进行一些智能行为,以获得聚合函数,例如avg(field)...

我能想到的唯一解决方案是使用SQL解析器并分析SELECT语句(叹气),但我没有找到任何看起来非常好的Python SQL解析器?

我没有在文档中找到任何相关问题或其他任何有相同问题的人,所以我可能错过了一些明显的东西?

编辑:要清楚 - 问题是找到SQL select的结果,其中select语句由用户在用户界面中提供。我无法控制它。如上所述,读取表定义没有用。

1 个答案:

答案 0 :(得分:1)

Python的DB API仅指定cursor.description的列名(此API的任何RDBMS实现都不会返回查询的表名...我将告诉您原因)。

你所要求的是非常困难的,甚至只有SQL解析器才能接近......即便如此,甚至有很多情况甚至是“Table”列的概念来自可能没什么意义。

考虑以下SQL语句:

  1. 哪个表格来自{<1}}

    today
  2. 哪个表格来自{<1}}

    SELECT DATE('now') AS today FROM TableA FULL JOIN TableB 
    ON TableA.col1 = TableB.col1;
    
  3. 哪个表格来自{<1}}

    myConst
  4. 哪个表格来自{<1}}

    SELECT 1 AS myConst;
    
  5. 上面是非常简单的SQL语句,你要么必须组成一个“表”,要么随意选择一个...... 即使你有一个SQL解析器!

    SQL为您提供了一个数据集作为结果。此集合中的元素不一定归因于特定的数据库表。您可能需要重新考虑解决此问题的方法。