SQL INSERT&之后没有显示新行使用Python和SQL“提交”

时间:2012-10-28 23:13:04

标签: 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个连接,每个连接都在自己的脚本中,但是当我完成它们时,我会关闭每个连接和每个光标。

1 个答案:

答案 0 :(得分:1)

问题可能在于您的变量now。我没有在循环中看到它被重置的任何地方。

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

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

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