首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python2.7- MySQL:在无限循环上运行时查询值不会更改

Python2.7- MySQL:在无限循环上运行时查询值不会更改
EN

Stack Overflow用户
提问于 2019-03-01 02:54:48
回答 1查看 86关注 0票数 1

这个想法是在值发生变化时显示一个消息框。query变量的COUNT(*)当前为0。当程序在无限循环中运行以检查是否有任何更改时,会创建一个新的请求,计数现在应该是1。但是,这并没有发生。控制台继续打印No new Tickets

当后台发生变化时,为什么query (row)变量没有更新?

如果我终止程序并重新运行它,它将获得新值。

代码语言:javascript
复制
while True:

#if this count increases by 1 send a notification in python that there is a new ticket     
query = """
        SELECT  COUNT(*)#q.id, q.Name, q.Description, t.Created, t.Subject
        FROM
        Queues as q
        LEFT JOIN Tickets as t
        on q.id = t.Queue
        LEFT JOIN Users as u
        on u.id = t.Owner
        WHERE
        q.id = 1 AND u.id = 10 AND t.Status = 'New'
        AND
        STR_TO_DATE(t.Created, "%Y-%m-%d") = CURDATE();
"""

cursor = conn.cursor()
cursor.execute(query)
row = cursor.fetchone()
#Debug for printing the current count
print row[0]
#if the current count of unowned and status ="new" tickets is greater than 0 send a notification.
if(row[0] > 0):
    ctypes.windll.user32.MessageBoxW(0, u"New Ticket Available", u"NEW TICKET", 1)
else:
    print "No new Tickets"
time.sleep(5)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 04:05:53

https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-commit.html

...by默认连接器/Python不会自动提交,因此在修改使用事务性存储引擎的表的数据的每个事务之后调用此方法非常重要。

此外,如果您的事务隔离级别是默认的(REPEATABLE-READ),那么对同一事务的后续查询将始终得到相同的结果,即使在此期间新数据一直在更改。

您有两个选择:

在开始事务之前,在loop.

  • set tx_isolation='REPEATABLE-READ';开始时,
  • 调用conn.commit()来获取数据库的新快照,这样长时间运行的事务就可以看到并发更改automatically.

的结果

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54932432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档