Python 查询结果集中存在重复的元素&;InterfaceError:绑定参数时出错

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() 在我的应用程序中,我需要检查给

我有以下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()
在我的应用程序中,我需要检查给定的文章是否已经存在于我的数据库中,如果已经存在,我需要它的
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()