仅从 SELECT 语句字符串中识别查询中的列数 - python

Identify the number of columns in a query from SELECT statement string alone - python

背景

我正在编写一个脚本来使用 python 执行查询,有时 select 语句可能不会 return 任何值,我需要假设一个空结果为零。因为空结果不携带任何列信息,所以我需要根据 select 语句本身找到预期的列数。

我试图通过以下方式实现这一点(请随时提出替代方法)

假设我有以下内容:

SELECT TO_CHAR('YYYY-MM-DD', DATE), 'some,string info', numbers FROM some_table;

我最初的尝试是解析出SELECT和FROM关键字之间的所有信息,return只是列输入,然后我尝试计算逗号的数量:

q = """TO_CHAR('YYYY-MM-DD',DATE), 'some,string info', numbers"""
commas = q.count(',')
print 'number of commas = ', commas

number of commas = 4

我假设#commas + 1 = #columns,但整个额外的逗号使该假设毫无用处。


问题

是否可以使用正则表达式来提取没有用引号或括号括起来的逗号?有没有更简单的方法来查找 SELECT 语句预期的列数?

我不是 python 专家,所以将任何 python 解决方案留给专家。

通过SQL,你可以达到你想要的,虽然它相当tricky/hacky和丑陋:

我们的想法是创建一个虚拟 table 并与您的 table:

进行左连接
create table dummy(dummy_value int);   // This needs to be done only once.

insert into dummy values(0);  // This needs to be done only once.

select YOUR_COLUMNS, dummy_value from (select dummy_value from dummy)dt LEFT OUTER JOIN YOUR_TABLE on 1=1;  // Modify your select queries like this/ Modify the script which creates query to add left outer join like this in all select queries

sqlfiddle

这是假设您可以在查询创建部分进行更改。

您可以检查名为 description 的游标属性。这将包含有关列的元数据,无论查询是否 returns 任何数据!