我有一個多線程數據分析管道,它查詢數據庫(通過SQLAlchemy)。此外,數據庫通過同步在多個系統間同步 - 長話短說,這意味着寫入權限並非始終得到保證。SQLAlchemy - 無需編寫/鎖定數據庫的查詢
即使我能保證的寫訪問,我還是偶爾會和,而隨機獲得操作上的失誤:
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。
我該如何更改我的代碼,以便可以查詢數據庫而不必依賴於可寫入/解鎖的文件?我已經檢查過該文件的校驗和,並且它在查詢時不會改變,所以顯然我沒有寫任何東西。因此,我想應該有一些方法來提取我沒有寫入權限的信息?
關於downvote,我知道如果您對使用Peewee不感興趣 - 博客文章詳細介紹了SQLite的鎖定和事務管理的複雜性,不管您使用何種ORM (或不使用)。 – coleifer
在這裏downvoter,我很抱歉沒有留下評論之前,有些事情需要注意。至於爲什麼,我沒有反對Peewee。原因是,這幾乎是[只鏈接回答](https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers)。我明白,如果用戶不需要按照鏈接獲取基本信息,則可能對此處引用自己不感興趣,但會更好地服務於此網站。答案本身應該回答並保留進一步閱讀的鏈接。此外,鏈接腐爛是一件事情。 –
謝謝澄清 - 我很欣賞建設性的反饋意見(downvote看起來公平)。再次感謝! – coleifer