gpt4 book ai didi

python - 有没有办法从 python 异步或并行运行 SQLite 查询?

转载 作者:行者123 更新时间:2023-12-03 19:43:16 25 4
gpt4 key购买 nike

如何以某种“非顺序”方式从 python 运行 sqlite3 语句?

这是一些代码,基本上直接来自 python 文档,在 sqlite3 上。 (我假设这段代码是按顺序执行的):

import sqlite3
conn = sqlite3.connect('::memory')
c = conn.cursor()

###First sequence
c.execute('''DROP TABLE IF EXISTS stocks''')
c.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','SOME_STOCK',100,35.14)")
conn.commit()

result_stocks = c.execute('''SELECT * FROM stocks''').fetchall()

### Second Sequence
c.execute('''DROP TABLE IF EXISTS bonds''')
# Create first table table
c.execute('''CREATE TABLE bonds
(date text, trans text, symbol text, qty real, price real)''')
c.execute("INSERT INTO bonds VALUES ('2006-01-05','BUY','SOME_BOND',100,35.14)")
conn.commit()

result_bonds = c.execute('''SELECT * FROM bonds''').fetchall()

conn.close()

print(result_stocks)
print(result_bonds)

有没有办法不等待“第一序列”完成就执行“第二序列”?

最佳答案



SQLite 数据库一次只能由一个连接写入;一个写事务将锁定整个数据库并阻止其他线程和进程读取或写入。

所以是的,您可以为每个序列创建一个线程,但是由于任何时候只有一个序列可以写入数据库,因此它们不会并发执行,这违背了异步运行它们的目的。

但是,如果您在线程运行查询时正在执行除查询数据库之外的其他操作,那么您会看到一个好处,因为查询线程将等待磁盘,从而释放 CPU 来做其他事情。但是在您的示例中,在单独的线程中运行两个序列没有任何好处。

关于python - 有没有办法从 python 异步或并行运行 SQLite 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25940079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com