代码之家  ›  专栏  ›  技术社区  ›  sikrut

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

  •  0
  • sikrut  · 技术社区  · 7 年前

    出身背景

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

    我试图通过以下方式实现这一点(请随意提出另一种方法)

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

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

    逗号数=4

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


    问题

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Anthony Tuininga    7 年前

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

        2
  •  0
  •   cosmos    7 年前

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

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

    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

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