首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Executemany混淆

Executemany混淆
EN

Stack Overflow用户
提问于 2010-11-05 04:31:17
回答 2查看 3.1K关注 0票数 0

好的,我有一个函数可以根据来自插件的输入来选择sqlite数据库中的某些行。我让插件在只涉及一条语句的情况下选择和获取行,但因为我想增加一些灵活性,所以我尝试让函数在遇到列表或元组时使用executemany。然而,尽管我做了这么多处理和更改,我仍然无法让它工作,要么是因为sqlite语句将字符串中的每个字符视为绑定,要么是因为元组中有太多的绑定。以下是我到目前为止拥有的代码:

代码语言:javascript
复制
    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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-05 04:50:42

看看http://www.python.org/dev/peps/pep-0249/

对于生成一个或多个结果集的操作,使用此方法会构成未定义的行为,并且允许实现

因此,executemany可以用于INSERT和UPDATE,但不能用于SELECT

您可以尝试以下代码:

代码语言:javascript
复制
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])
票数 5
EN

Stack Overflow用户

发布于 2010-11-05 04:43:06

我不认为你这里需要executemany

试试下面这样的代码:

代码语言:javascript
复制
self.memcursor.execute('''SELECT id, matbefore, matafter, name, date 
                            FROM main 
                           WHERE name IN (%s)''' % 
                       ','.join('?'*len(offset)), (offset,))

请注意,执行字符串插值是为了在查询中放置多个占位符。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4101076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档