2
我在sqlite數據庫中有兩個簡單的表。ProgrammingError SQLAlchemy中的線程錯誤
from sqlalchemy import MetaData, Table, Column, Integer, ForeignKey, \
create_engine, String
from sqlalchemy.orm import mapper, relationship, sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:///dir_graph.sqlite', echo=True)
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)
session = Session()
Base = declarative_base()
class NodeType(Base):
__tablename__ = 'nodetype'
id = Column(Integer, primary_key=True)
name = Column(String(20), unique=True)
nodes = relationship('Node', backref='nodetype')
def __init__(self, name):
self.name = name
def __repr__(self):
return "Nodetype: %s" % self.name
class Node(Base):
__tablename__ = 'node'
id = Column(Integer, primary_key=True)
name = Column(String(20), unique=True)
type_id = Column(Integer,
ForeignKey('nodetype.id'))
def __init__(self, _name, _type_id):
self.name = _name
self.type_id = _type_id
Base.metadata.create_all(engine)
運行後,我與解釋器交互。例如n1 = Node('Node1',1)瞭解sqlalchemy。在我完成session.commit()之後,嘗試另一個語句,例如n2 = Node('n2',1)我得到這個錯誤: sqlalchemy.exc.ProgrammingError :(編程錯誤)在一個線程中創建的SQLite對象只能用在同一個線程中。該對象是在線程ID 3932中創建的,是線程ID 5740無無。
如何在我完成提交後繼續會話? tnx
錯誤是SQLite的驅動程序錯誤,它是什麼,它說,這是你不能使用兩個不同的線程的連接 - 有更多的故事在這裏,你究竟在這裏如何運行Session?有線程正在進行嗎? – zzzeek 2013-03-02 16:16:59
沒有故意與線程。我在Spyder中運行此代碼。運行設置是在運行後與解釋器交互。這就是我所做的。它看起來像commit()關閉連接,然後我有重新初始化。我沒有在SQLalchemy文檔中找到excat提示。 – ArtDijk 2013-03-03 11:09:48
嘗試在默認的Python解釋器中運行或作爲單個腳本運行。從來沒有聽說過「Spyder」,但它可能做線程奇怪的事情。 – zzzeek 2013-03-03 16:37:35