【发布时间】:2014-04-13 17:21:07
【问题描述】:
我正在使用一个通用函数来执行一个类中的所有 sqlite 查询。一切正常,直到我在列表中使用包含多个项目的 for 循环。
下面是执行 sqlite 查询的常用函数:
def executeQuery(self, query, params = ()):
results = {}
try:
cur = self.conn.cursor()
cur.execute(query, params)
self.conn.commit()
rows = cur.fetchall()
results['status'] = 'success'
result = []
if rows:
column = map(lambda x: x[0], cur.description)
for row in rows:
result.append( dict(zip(column, row)) )
results['results'] = result
except self.conn.Error, e:
if self.conn:
self.conn.rollback()
print "Error: %s" % e.args[0]
results['status'] = 'failure'
results['results'] = e.args[0]
finally:
if self.conn:
self.conn.close()
return results
这是导致数据库关闭错误的循环:
stages = self.getStageByDate(2000)
for stage in stages['results']:
print stage['name']
additives = self.getStageAdditives(stage['name'])
print additives
for additive in additives['results']:
print additive
错误似乎源自 getStageAdditives(),因为它返回 4 个项目,而 getStageByDate() 仅返回 1 个。
在我看来,在尝试第二次连接之前,与数据库的连接并未关闭。为什么会这样?与 MySQL 数据库一起使用时不会发生这种情况。这个问题有什么解决办法?
【问题讨论】:
标签: python sql python-2.7 sqlite