背景
我正在编写一个用python执行查询的脚本,有时候select语句可能不会返回任何值,我需要假设一个空结果为零。因为null结果不包含任何列信息,所以我需要根据select语句本身找到预期的列数。
我试图通过以下方式实现这一目标(请随意提出另一种方法)
假设我有以下内容:
SELECT TO_CHAR('YYYY-MM-DD', DATE), 'some,string info', numbers FROM some_table;
通过我最初的尝试,我解析了SELECT和FROM关键字之间的所有信息,只返回列输入,然后我试着计算逗号的数量:
q = """TO_CHAR('YYYY-MM-DD',DATE), 'some,string info', numbers"""
commas = q.count(',')
print 'number of commas = ', commas
逗号数量= 4
我假设#commas + 1 = #columns,但是额外的逗号会使这个假设变得无用。
问题
是否可以使用正则表达式提取未用引号或括号括起来的逗号?有没有更简单的方法来查找SELECT语句中预期的列数?
答案 0 :(得分:1)
您可以检查名为description的cursor属性。这将包含有关列的元数据,无论查询是否返回任何数据!
答案 1 :(得分:0)
我不是python专家,因此请将任何python解决方案留给专家。
通过SQL,你可以实现你想要的,虽然它非常棘手/ hacky和丑陋:
我们的想法是创建一个虚拟表并与您的表进行左连接:
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
假设您可以在查询创建部分进行更改。