使用Python和SQL在SQL插入和“提交”之后没有显示新行

2024-05-14 20:41:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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部分:

^{pr2}$

我试过SQLite,我试过OracleMySQL的连接器,我在Windows和Linux系统上试用了MySQLdb,但都有相同的问题。我查看了很多关于Stackoverflow的线程,这些线程建议在SQL语句(例如onetwothree)之后打开autocommit或使用commit(),我尝试过,但失败了。在

当我用HeidiSQL向数据库添加数据时,它在循环查询中出现,但我不知道为什么会这样。在Linux上用mysql客户机插入的行和Python插入脚本在重新启动循环脚本之前不会显示。在

我不知道是不是我打开了2个连接,每个连接都用它们自己的脚本,但当我处理完所有连接和光标时,我会关闭它们。在


Tags: 脚本loop数据库closesqllinuxdef条目
1条回答
网友
1楼 · 发布于 2024-05-14 20:41:35

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

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

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

插入数据库的时间似乎是将来的时间。我不认为你的问题出在你的数据库连接上,我认为这与你正在做的查询有关。在

相关问题 更多 >

    热门问题