Невозможно получить новые данные в Python из базы данных MySQL при добавлении новых данных - PullRequest
1 голос
/ 08 мая 2019

Я хочу сделать скрипт на python, который последовательно проверяет базу данных Mysql. Возникающая проблема заключается в том, что в первый раз проверяется, что нет данных, которые он постоянно говорит, что в базе данных нет данных, даже после того, как я добавляю данные в базу данных.

Но если данные уже есть в базе данных, я немедленно извлекаю их и продолжаю.

Что я могу сделать, чтобы мой скрипт на python последовательно проверял базу данных, и если он находит данные, он останавливает проверку базы данных и продолжает

Я попытался запустить его, когда в базе данных нет данных, а затем добавил данные в базу данных

import mysql.connector



mydb = mysql.connector.connect(
          host='localhost',
          user='root',
          passwd='',
          database='local_data'
        )

mycursor = mydb.cursor()

node_id = 123
node_id = str(node_id)

print('getting code...')

a = 0
while True:
    try:
        time.sleep(1)
        a=a+1
        print(a)
        sql = "SELECT code_name FROM node_code where node_id = '"+node_id +"'"    
        mycursor.execute(sql)
        myresult = mycursor.fetchone()
        for x in myresult:
            filename=x
        print(filename)
        break

    except Exception as error:
        print("Nothing in database\n")
        print(error)

Я ожидаю вывода, где он продолжает проверять базу данных, пока не найдет данные, после чего он продолжает

Я получаю эти результаты. К моменту запуска второго цикла данные были вставлены в базу данных

getting code...
1
Nothing in database

'NoneType' object is not iterable
2
Nothing in database

'NoneType' object is not iterable
3
Nothing in database

Если данные уже есть в базе данных до запуска скрипта, я получаю это

getting code...
1
server.py

1 Ответ

0 голосов
/ 08 мая 2019

Это потому, что транзакция не завершилась, пока вы не сделаете коммит для завершения этой транзакции. Попробуйте совершить эту транзакцию, выполнив mycursor.commit () в конце цикла

...