gpt4 book ai didi

python - SQL数据库中的查询多线程

转载 作者:行者123 更新时间:2023-12-03 12:53:58 31 4
gpt4 key购买 nike

假设我有一个例如Messenger的数据库。我的应用正在收集消息并将其存储在我的数据库中。它是什么类型的数据库都没有关系(我想知道它通常是如何实现的,我的数据库是否支持它,如果不支持它,是否还有其他数据库可以做到),但在我的情况下是PostgreSQL。我也在使用Python psychopg2适配器。我真正想要的是管理所有查询,以使它们不会互相干扰。
让我们弄清楚我想要什么。假设我们有两个线程,显然是两个客户端,它们正在不同的线程中运行,并且正在从数据库中加载消息。客户端1正在运行:

SELECT * FROM messages WHERE user_id = client1_id;
要从数据库中选择他写的所有消息,然后尝试获取数据,但是取而代之的是 ,我猜都是来自Client2的所有消息。现在发生的事情是:
# in thread 1:

cursor.execute('SELECT * FROM messages WHERE user_id = %s;', client1_id)

# in thread 2

cursor.execute('SELECT * FROM messages WHERE user_id = %s;', client2_id) << this is the last SELECT

# then again in thread 1

cursor.fetchall() << fetching data from the last select

# and then in thread 2

cursor.fetchall()
*我认为将要发生的*,是Client1将从最后一次选择中检索数据,在这种情况下,它是Client2的数据,这就是我要寻找答案的问题。

问题
如何在不同的线程中从数据库读取和写入数据,以便每个客户端与其他客户端分别运行其查询?

正如 here所提到的,多个连接对我来说不是一个好的解决方案,并且我认为例如当您有10000个用户时,连续缓冲所有查询并按顺序执行它们是没有意义的。那么,在这种情况下我应该使用哪种架构?提前致谢。

最佳答案

基本上,当您在任何一个中打开连接时,这都是关闭它然后创建新连接的好方法。在上面的代码中,您正在执行两个查询并在第二个线程之后进行访存。现在,您将在第二个线程中获得结果。正确的方法是,创建一个连接,获取结果并在操作完成后关闭该连接,然后像执行该操作一样将其打开并关闭它,然后打开一个新连接。在任何编程语言中都可以很好地遵循这种方法。下面是示例代码,

# in thread 1:

cursor.execute('SELECT * FROM messages WHERE user_id = %s;', client1_id)

cursor.fetchall()
con.close()

# in thread 2

cursor.execute('SELECT * FROM messages WHERE user_id = %s;', client2_id)

cursor.fetchall()
con.close()

关于python - SQL数据库中的查询多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61560302/

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