【发布时间】:2017-09-08 21:39:18
【问题描述】:
我有一个多线程数据分析管道,它查询数据库(通过 SQLAlchemy)。此外,数据库通过 syncthing 跨多个系统同步 - 长话短说,这意味着不能始终保证写入权限。
即使我能够保证写访问,我仍然偶尔而且相当随机地遇到操作错误:
OperationalError: (sqlite3.OperationalError) database is locked
我用来为查询加载会话的代码如下:
def loadSession(db_path):
db_path = "sqlite:///" + path.expanduser(db_path)
engine = create_engine(db_path, echo=False)
Session = sessionmaker(bind=engine)
session = Session()
Base.metadata.create_all(engine)
return session, engine
并且可以在其完整的上下文中看到here。
我的查询(以及我将其转化为值的方式)如下所示:
session, engine = loadSession(db_path)
sql_query=session.query(LaserStimulationProtocol).filter(LaserStimulationProtocol.code==stim_protocol_dictionary[scan_type])
mystring = sql_query.statement
mydf = pd.read_sql_query(mystring,engine)
delay = int(mydf["stimulation_onset"][0])
同样,完整的上下文可以在here找到。
如何更改我的代码,以便可以查询数据库而不必依赖可写/解锁的文件?我检查了文件的校验和,它在查询时没有改变,所以很明显我没有写任何东西。因此,我想应该有某种方法可以在没有写入权限的情况下提取我正在寻找的信息?
【问题讨论】:
标签: python multithreading sqlite permissions sqlalchemy