我有一个正在运行的脚本,我想在将数据添加到数据库时对其进行处理。
import mysql.connector
import time
wait_time = 2
mydb = mysql.connector.connect(
host="localhost",
user="xxx",
passwd="yyy",
database="my_database"
)
mycursor = mydb.cursor()
while True:
sql = "SELECT * FROM data WHERE processed = 0"
mycursor.execute(sql)
records = mycursor.fetchall()
for i, r in enumerate(records):
print(r)
time.sleep(wait_time)
但是,如果通过其他连接插入一行,则此连接不会显示该行。
即如果我通过第三方应用程序连接到数据库,并在
中插入一行但是,如果我重新启动上面的脚本,它将出现。
有什么想法吗?
答案 0 :(得分:1)
使用消息队列(例如RabbitMQ)。获取第三方应用程序以使用它。消息队列实现具有更好的API,用于异步处理信息。即使您仅使用消息队列来存储数据库内容的主键。
或者启用二进制日志记录,并使用a replication protocol library处理事件。
答案 1 :(得分:0)
我刚刚遇到了同样的错误。解决它的最简单方法是……在循环内定义 mydb 和 mycursor。
import mysql.connector
import time
wait_time = 2
while True:
mydb = mysql.connector.connect(
host="localhost",
user="xxx",
passwd="yyy",
database="my_database"
)
mycursor = mydb.cursor()
sql = "SELECT * FROM data WHERE processed = 0"
mycursor.execute(sql)
records = mycursor.fetchall()
for i, r in enumerate(records):
print(r)
time.sleep(wait_time)