使用pymssql库 - 即使没有任何可用值,查询返回未知值?

时间:2017-05-04 16:53:48

标签: python sql tuples pymssql

我是python和Web开发的新手。所以请放轻松我:)。

我在下面有一段代码 - >

private void Button_Click(object sender, RoutedEventArgs e)
    {
      flag = !flag;

      var list = new List <ChartPoint>();

      Task.Factory.StartNew(() =>
      {
        for (int i = 0; i < 50000000; i++)
        {
          if (flag == false) break;
          m.MyValue = i.ToString();
          Dispatcher.BeginInvoke(new Action(() =>
                                            {
                                              m.MyCollection.Add(new ChartPoint
                                                                 {
                                                                   A = i,
                                                                   B = 2 * i
                                                                 });
                                            }),
                                 DispatcherPriority.Background);
        }
      });
    }

以上代码返回未知值,尤其是numberOfHl,即[( 11 ,1),( 9 ,2),( 5 ,3),( 12 ,4),( 10 ,5)]因为我知道当我在SQL中运行该查询时它不返回任何值。

我在这里做错了什么?我的查询是否需要更改并正确处理空值?通过添加.join我创建那些未知值?

请任何帮助将不胜感激。再次,我很抱歉我缺乏编程知识。

1 个答案:

答案 0 :(得分:2)

我不完全确定发生了什么,但你做得有点不对 您应该首先使用占位符准备查询字符串:

querystring = """
    select COUNT(hl.id), h.number_id from h
    left join hl on hl.h_id = h.id
    left join l on l.id = hl.l_id
    where h.number_id in (%s) and l.letter_id in (%s)
    GROUP by h.number_id
    """ % (','.join(len(onlyNumber)*['%s']), ','.join(len(onlyLetter)*['%s']))

结果:

>>> print(querystring)

    select COUNT(hl.id), h.number_id from h
    left join hl on hl.h_id = h.id
    left join l on l.id = hl.l_id
    where h.number_id in (%s,%s,%s,%s,%s) and l.letter_id in (%s,%s,%s,%s,%s)
    GROUP by h.number_id

那么你有占位符,你可以将值作为第二个参数传递给.execute(),如下所示:

 cur.execute(querystring,tuple(onlyNumber + onlyLetter))