Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅从SELECT语句字符串识别查询中的列数-python_Python_Sql_Regex_Cx Oracle - Fatal编程技术网

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

仅从SELECT语句字符串识别查询中的列数-python,python,sql,regex,cx-oracle,Python,Sql,Regex,Cx Oracle,背景 我正在编写一个脚本来使用python执行查询,有时select语句可能不会返回任何值,我需要假设空结果为零。因为null结果不携带任何列信息,所以我需要根据select语句本身找到预期的列数 我正试图通过以下方式实现这一点,请随意提出另一种方法 假设我有以下几点: SELECT TO_CHAR('YYYY-MM-DD', DATE), 'some,string info', numbers FROM some_table; 在我最初的尝试中,我解析了SELECT和FROM关键字之间的所有

背景

我正在编写一个脚本来使用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

我假设逗号+1=列,但整个过程中额外的逗号使该假设无效

问题:


正则表达式能否用于提取不包含引号或括号的逗号?有没有一种更简单的方法可以从SELECT语句中找到所需的列数?

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

通过SQL,您可以实现您想要的,尽管它相当棘手/粗糙且丑陋:

其思想是创建一个虚拟表,并与您的表进行左连接:

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的游标属性。它将包含关于列的元数据,而不管查询是否返回任何数据

我很困惑。我理解你的问题,这看起来有点过头了。你只想知道你的查询是否有结果?如果一个字段有一个空条目,你仍然会得到相同数量的逗号。如果您根本没有得到结果,那么很容易进行测试。不是字段有空条目,而是查询没有返回行。在这种情况下,你还能怎么计算列数呢。您的查询要么返回a/some结果,要么不返回。假设您do data=c.fetchall,那么您可以测试它是否有if data:的结果。如果您的查询返回任何结果,那么每一行都将有相同数量的逗号,因为它包含相同数量的字段,而不管这些字段是否为null,因此计数“,”完全没有意义。如果查询不返回任何内容,如果data:为False,那么按照我的示例的格式,我将按日期分组数据。如果没有该日期的可用数据,查询将不返回任何内容,但我需要假设它们在本例中的值都为零。这就是为什么我需要一种方法来将列数拉到结果本身之外。所以我在探索如何从查询字符串中提取信息这正是我所需要的。非常感谢。