我是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我创建那些未知值?
请任何帮助将不胜感激。再次,我很抱歉我缺乏编程知识。
答案 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))