2012-10-28 18 views
3

我在Python中做了一个循环,它调用自己重复检查数据库中的新条目。在第一次执行时,所有受影响的行都显示正常。同时,我在数据库中添加更多行。在我的循环中的下一个查询中,新行不显示。在SQL INSERT&“commit”后,Python和SQL没有出现新行

这是我的查询循环:

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的,我试过甲骨文MySQL的连接器,我试过MySQLdb的在Windows和Linux系统上,都有同样的问题。我查看了Stackoverflow上的许多线程,这些线程建议打开自动提交或在SQL语句(例如one,two,three)之后使用commit(),我试过并失败了。

当我使用HeidiSQL将数据添加到数据库时,它显示在循环查询中,但我不知道为什么会这样。在Linux重新启动我的循环脚本之前,Linux和MySQL插入脚本中插入的行不会显示。

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

回答

1

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

我可能会使用mysql NOW()功能:

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

看起来要插入到数据库中的时间是在未来的时间点。我不认为你的问题与你的数据库连接有关,我认为这与你正在做的查询有关。

+0

现在我觉得很蠢。这实际上起作用。非常感谢你! – chrki

+0

很容易将注意力集中在一个问题上,而忽略了明显的答案。我已经做了比我记得更多的时间了。 –