好的,我有一个函数可以根据来自插件的输入来选择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)发布于 2010-11-05 04:50:42
看看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])发布于 2010-11-05 04:43:06
我不认为你这里需要executemany。
试试下面这样的代码:
self.memcursor.execute('''SELECT id, matbefore, matafter, name, date
FROM main
WHERE name IN (%s)''' %
','.join('?'*len(offset)), (offset,))请注意,执行字符串插值是为了在查询中放置多个占位符。
https://stackoverflow.com/questions/4101076
复制相似问题