Python 查询结果集中存在重复的元素&;InterfaceError:绑定参数时出错
我有以下DatabaseManager类,用于管理SQLite数据库:Python 查询结果集中存在重复的元素&;InterfaceError:绑定参数时出错,python,sql,sqlite,Python,Sql,Sqlite,我有以下DatabaseManager类,用于管理SQLite数据库: class DatabaseManager(object): def __init__(self, db): self.conn = sqlite3.connect(db) self.conn.execute('pragma foreign_keys = on') self.conn.commit() self.cur = self.conn.cursor() 在我的应用程序中,我需要检查给
class DatabaseManager(object):
def __init__(self, db):
self.conn = sqlite3.connect(db)
self.conn.execute('pragma foreign_keys = on')
self.conn.commit()
self.cur = self.conn.cursor()
在我的应用程序中,我需要检查给定的文章是否已经存在于我的数据库中,如果已经存在,我需要它的id
。我使用DatabaseManager的以下方法:
def article_exists(self, url):
self.cur.execute('SELECT id FROM articles WHERE url = ?', (url,))
self.conn.commit()
ids = list(self.cur)
if len(ids) == 0:
return (False, None)
if len(ids) == 1:
return (True, ids[0][0])
else:
print 'Duplicate articles:', url
return (True, ids[0][0])
出于某种原因,如果文章已经存在,则生成的ids
列表有时包含两个具有相同id的元素,例如[(3,),(3,)]
。你知道为什么会这样吗
我想我可以使用self.cur.fetchone();然而,我发现这种行为很奇怪
更新
文章的表定义
:
CREATE TABLE articles (
id INTEGER PRIMARY KEY,
title TEXT,
url TEXT,
authors TEXT,
abstract TEXT );
每当发生此问题时,我还会收到以下错误消息:
InterfaceError:绑定参数0时出错-可能是不支持的类型
但是,我还检查了变量url
的类型,它总是一个字符串,这是正确的类型
我正在运行Ubuntu12.04 LTS和sys.version
提供:
2.7.3 (default, Feb 27 2014, 19:58:35)
[GCC 4.6.3]
唯一可能的结论似乎是数据库表中确实有重复的条目。由于您没有显示表定义,因此无法说明这是如何产生的,但似乎
ID
列(我假定它是主键)没有唯一索引,因此允许重复值。我找到了导致错误消息的原因。处理完每篇文章后,我还更新了processed
标志-相关“message”对象表中的一列:
但是,此方法缺少提交行:
self.conn.commit()
添加后,一切正常
(不过,如果有人能解释为什么会发生这种情况,我很高兴知道!)谢谢。我已经添加了表定义。
id
列定义为integer主键
。因此,从您的回答中可以看出,是提交失败导致了最初的问题。很抱歉,我无法解释为什么会看到重复的值。
self.conn.commit()