python - 使用 Python 和 SQL 在 SQL INSERT & "commit"之后未显示新行

标签 python mysql sqlite commit autocommit

我在 Python 中创建了一个循环,该循环调用自身以反复检查数据库中的新条目。第一次执行时,所有受影响的行都显示正常。同时,我向数据库中添加了更多行。在我的循环中的下一个查询中,没有显示新行。

这是我的查询循环:

def loop():
    global mysqlconfig # username, passwd...
    tbd=[] # this is where I save the result
    conn = MySQLdb.connect(**mysqlconfig)
    conn.autocommit(True)
    c = conn.cursor()
    c.execute("SELECT id, message FROM tasks WHERE date <= '%s' AND done = 0;" % now.isoformat(' '))
    conn.commit()
    tbd = c.fetchall()      
    print tbd
    c.close()
    conn.close()

    time.sleep(5)
    loop()
loop()

这是我的 Python 插入脚本的 SQL 部分:

conn = MySQLdb.connect(**mysqlconfig)
conn.autocommit(1)
c = conn.cursor()
c.execute("INSERT INTO tasks (date, message) VALUES ('{0}', '{1}');".format("2012-10-28 23:50", "test")) 
conn.commit()
id = c.lastrowid
c.close()
conn.close()

我试过 SQLite,我试过 Oracle MySQL 的连接器,我在 Windows 和 Linux 系统上试过 MySQLdb,但都遇到了同样的问题。我查看了 Stackoverflow 上的许多线程,建议在 SQL 语句(例如 onetwothree)之后打开自动提交或使用 commit(),我尝试过但失败了。

当我使用 HeidiSQL 将数据添加到我的数据库时,它出现在循环查询中,但我真的不知道这是为什么。在 Linux 上使用 mysql-client 插入的行和我的 Python 插入脚本在我重新启动我的循环脚本之前永远不会显示。

我不知道是不是我打开了 2 个连接,每个连接都在它们自己的脚本中,但是当我完成它们时我关闭了每个连接和每个游标。

最佳答案

问题可能出在您的变量 now 上。我在循环中的任何地方都看不到它正在被重置。

我可能会使用 mysql NOW() 函数:

c.execute("SELECT id, message FROM tasks WHERE date <= NOW() AND done = 0;")

看起来您要插入数据库的时间是 future 的时间。我认为您的问题不在于您的数据库连接,我认为这与您正在执行的查询有关。

关于python - 使用 Python 和 SQL 在 SQL INSERT & "commit"之后未显示新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13113984/

相关文章:

python - 优化Python在三迭代语句中的计数

php - 无法在 $_SESSION 中存储数据库连接

iphone - 为 iPhone 应用程序存储数据

python - Tensorflow 中的多个分类输入变量

python - 按 "kind"计算值并使用该计数更新 DataFrame 中的值的更快方法?

php - 使用 MySQL SELECT AS 获取当前纬度/经度

java - 如何使用 Struts2 和 Hibernate 删除和修改数据

c# - 使用表创建 c# 类。 Sqlite网

java - 我想显示数据库 JAVA Jframe 中的用户名

python - 在字典中存储 Lambda