批量执行困惑
好的,我有一个函数,它根据插件的输入从sqlite数据库中选择特定的行。我让插件在只有一个语句的情况下选择和获取行,但因为我想增加一些灵活性,所以我尝试让这个函数在遇到列表或元组时使用executemany。不过,尽管我尝试了很多方法和修改,我还是无法让它正常工作,可能是因为sqlite语句把字符串中的每个字符都当作一个绑定,或者是元组中的绑定数量太多。以下是我目前的代码:
def readoffset(self,offset):
vartype = type(name)
print(vartype)
if vartype == int:
self.memcursor.execute('''select all id,matbefore,matafter,name,date
from main as main where id = ?''',[offset])
undolist = self.memcursor.fetchall()
print(undolist)
return(undolist)
elif vartype == tuple or list:
print(vartype)
self.memcursor.executemany('''select all id,matbefore,matafter,name,date
from main as main where name = (?)''', [offset])
undolist = self.memcursor.fetchall()
return(undolist)
2 个回答
3
我觉得你这里不需要用到 executemany
。
可以试试下面这样的写法:
self.memcursor.execute('''SELECT id, matbefore, matafter, name, date
FROM main
WHERE name IN (%s)''' %
','.join('?'*len(offset)), (offset,))
注意,这里用字符串插值的方式把多个占位符放进查询里。
5
可以看看这个链接:http://www.python.org/dev/peps/pep-0249/
使用这个方法进行操作,如果产生一个或多个结果集,就会出现未定义的行为,具体实现是允许的。
所以,executemany可以用来执行INSERT(插入)和UPDATE(更新),但不能用来执行SELECT(查询)。
你可以试试下面的代码:
elif isinstance(offset, (tuple, list)):
offsets=', '.join(offset)
self.memcursor.execute('''select all id,matbefore,matafter,name,date
from main as main where name IN (?)''', [offsets])