pymysql仅检测实例化新连接后在外部进行的更改

时间:2013-11-27 12:18:12

标签: python mysql pymysql

我正在尝试运行一个Python脚本,该脚本会永久打开一个连接,并响应脚本之外的更改。

例如:

  1. 数据脚本:接受表单帖子并将表单数据提交到数据库
  2. 工作人员脚本:监控数据库中的新表单帖子并采取相应措施
  3. 工作人员脚本中的相关代码是:

    import pymysql
    
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='dbuser', passwd='dbpass', db='my_db')
    
    def processForms(Formdat):
        c = conn.cursor(pymysql.cursors.DictCursor)
        myform.sendEmail(c)
        conn.commit()
        c.close()
    
    def doForms():
        while True:
            ... get data and store in 'myforms' ...
            futures = [executor.submit(processForms, myform) for myform in myforms]
            time.sleep(30)
    
    doForms()
    

    现在我不明白为什么这不是新的表单...如果我在doForms()的每次迭代中创建一个新连接,那么新表单会被选中,但我不想创建并且一直在破坏连接。

    例如,此修改有效:

    conn = None
    
    def doForms():
        while True:
            global conn
            conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='mw_py')
            ... get data and store in 'myforms' ...
            futures = [executor.submit(processForms, myform) for myform in myforms]
            conn.close()
            time.sleep(30)
    

    我有没有办法使用开放式连接并让它轮询最新数据?

1 个答案:

答案 0 :(得分:0)

在脚本开头打开1个连接。连接起来并不便宜。

记住提取的最后一行的ID。

在每次迭代中,选择ID大于上次看到的行。