我正在尝试使用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
正如我所说,这种语法适用于另一个表,所以我看不出是什么导致了这个问题。
有人可以帮忙吗?