私はデータベースを照会する(SQLAlchemyを使用して)マルチスレッドのデータ解析パイプラインを持っています。さらに、データベースは複数のシステム間でsyncthingによって同期化されています。つまり、ストーリーが短いため、書き込み権限が常に保証されるわけではありません。SQLAlchemy - データベースの書き込み/ロックなしのクエリ
私は書き込みアクセスを保証することができる午前ときであっても、私はまだ時折、かなりランダムに取得する操作ミス:
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
:
OperationalError: (sqlite3.OperationalError) database is locked
私は、クエリのためのセッションをロードするために使用するコードは以下のとおりです。
そしてその完全な文脈で見ることができます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を見つけることができます。
書き込み可能/ロック解除されているファイルに頼ることなくデータベースを照会できるように、コードを変更するにはどうすればよいですか?私はファイルのチェックサムをチェックしていますが、それはクエリー時に変更されないので、明らかに何も書いていません。このように、私は書き込みアクセスなしで探している情報を抽出するいくつかの方法があるはずですね?
あなたがPeeweeの使用に興味がないなら、私は理解しています - ブログ記事には、SQLiteでのロックとトランザクション管理の複雑さが詳しく説明されています。 (または使用しない)。 – coleifer
ここでは、コメントを残していないことをお詫びします。なぜ、私はピーエーとは何の関係もありません。理由はこれがかなり[リンクのみの回答](https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers)であるということでした。私はあなたがここであなた自身を引用することに無関心かもしれないことを理解しますが、基本を得るためにユーザがリンクをたどる必要がない場合、このサイトをより良く提供します。答え自体は、よく読んで、さらに読むことへのリンクを持っていなければなりません。また、リンクの腐敗が問題です。 –
明確にしていただきありがとうございます - 私は建設的なフィードバック(およびdownvoteが公正と思われる)を感謝します。再度、感謝します! – coleifer