Не обновляются записи в Mysql select на python
Запускаю скрипт, все выводит правильно.
Но если во время выполнения скрипта ручками (или другим скриптом) подправить поле is_deleted у любой записи, то в выводе программы ничего не поменяется ?
Что я делаю не так?
P.S. если добавить cnx.commit() внутрь цикла, то все заработает. Но ведь он нужен только для insert/update/delete ? Что-то я запутался
import mysql.connector
import time
cnx = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name')
while True:
cursor = cnx.cursor()
query = ("SELECT id, name FROM students WHERE is_deleted = 0 ")
cursor.execute(query)
for (student) in cursor:
print(student[1] )
cursor.close()
time.sleep(0.1)
cnx.close()
Ответы (1 шт):
Проблема, возникает из-за того, что ваш скрипт выполняет запрос к базе данных только один раз при каждой итерации цикла while. Если в процессе выполнения скрипта поле is_deleted для какой-либо записи изменяется, то вам нужно выполнять запрос к базе данных повторно, чтобы учесть эти изменения. Ваш текущий код не выполняет повторных запросов после инициализации.
Если таким образом изменить код, то по идее все должно работать как нужно:
import mysql.connector
import time
cnx = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)
while True:
cursor = cnx.cursor()
query = ("SELECT id, name FROM students WHERE is_deleted = 0")
cursor.execute(query)
for (student) in cursor:
print(student[1])
cursor.close()
time.sleep(0.1)
В этой версии кода у вас будет создан новый курсор на каждой итерации цикла, что позволит вам выполнять новый запрос к базе данных и учитывать изменения, внесенные в поле is_deleted. Кроме того, вы можете использовать time.sleep(0.1) для добавления задержки между итерациями цикла, чтобы не нагружать систему излишне.