Я создал цикл на 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()
Это часть SQL моего скрипта вставки Python:
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, я попробовал MySQLdb в системе Windows и Linux, и у всех была одна и та же проблема. Я просмотрел множество потоков в Stackoverflow, в которых рекомендовалось включить автофиксацию или использовать commit() после оператора SQL (например, один, два, три), которые я пробовал и не смог.
Когда я добавил данные с помощью HeidiSQL в свою базу данных, они появились в циклическом запросе, но я действительно не знаю, почему это так. Строки, вставленные с помощью mysql-client в Linux, и мой скрипт вставки Python никогда не отображаются, пока я не перезапущу циклический скрипт.
Я не знаю, дело ли в том, что я открываю 2 соединения, каждое в своем собственном скрипте, но я закрываю каждое соединение и каждый курсор, когда заканчиваю работу с ними.