SQLite 3 OperationalError无法回滚 - 没有事务处于活动状态

时间:2016-04-11 21:50:10

标签: python python-2.7 sqlite sqlalchemy

我正在尝试使用sqlalchemy填充数据库表。

我正在使用dataset写入数据库。

from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy import exc
import dataset
import sqlite3

Base = declarative_base()

class Eticks(Base):
    __tablename__ = 'Eticks'
    id = Column(String(25),primary_key=True)
    affected_vers = Column(String(250),primary_key=False)

engine = create_engine('sqlite:///work_items.db', pool_recycle=3600)
Base.metadata.create_all(engine)

def format_vers(versobj):
    if isinstance(versobj,list):
        return " - ".join(versobj)
    else:
        return versobj

for i in list_of_objects:
    with dataset.connect('sqlite:///work_items.db',
                         engine_kwargs={'pool_recycle': 3600}) as table:
        table['Eticks'].upsert(dict(id=i.id,
        affected_vers=format_vers(getattr(i,'Affected versions','Unspecified'))),['id'])

我之前为另一个表使用过这个完全相同的语法,但是我现在在这里尝试时遇到错误:

sqlalchemy.exc.OperationalError: 
(sqlite3.OperationalError) cannot rollback - no transaction is active

我正在循环播放的列表相当大 - 有24,000项 - 可能是相关的吗?

我还注意到,如果我使用table['Eticks'].upsert而不是.insert

,错误会更快地被抛出

正如我所说,这种语法适用于另一个表,所以我看不出是什么导致了这个问题。

有人可以帮忙吗?

0 个答案:

没有答案