mysql.connector无法检测到外部数据更改

时间:2018-12-05 03:32:20

标签: python mysql

我有一个正在运行的脚本,我想在将数据添加到数据库时对其进行处理。

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)

但是,如果通过其他连接插入一行,则此连接不会显示该行。

即如果我通过第三方应用程序连接到数据库,并在

中插入一行

但是,如果我重新启动上面的脚本,它将出现。

有什么想法吗?

2 个答案:

答案 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)