仅从 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
这是假设您可以在查询创建部分进行更改。
您可以检查名为 description 的游标属性。这将包含有关列的元数据,无论查询是否 returns 任何数据!
背景
我正在编写一个脚本来使用 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
这是假设您可以在查询创建部分进行更改。
您可以检查名为 description 的游标属性。这将包含有关列的元数据,无论查询是否 returns 任何数据!