Подтвердить что ты не робот

Соединение MySQL-python не видит изменений в базе данных, сделанных на другом соединении, даже после того, как изменения зафиксированы

Я использую модуль MySQLdb для Python (v1.2.3 precompiled binary для Windows Python 2.7) для чтения и записи данных в базу данных MySQL. Когда соединение открыто, я могу использовать это соединение для наблюдения за изменениями, внесенными в базу данных в том же соединении, но не вижу изменений, сделанных с использованием другого соединения, независимо от того, выполнено ли другое соединение на Python или произошли изменения, сделанные с использованием клиент командной строки MySQL. В случае, когда я делаю обновления с помощью Python, обратите внимание, что я запускаю команду commit() в соединении.

Пример программы, которая вставляет новые записи в тестовую таблицу с одним столбцом VARCHAR:

import MySQLdb

conn = MySQLdb.connect("localhost", "test", "test", "test")
c = conn.cursor()
c.execute("INSERT INTO test VALUES(%s)", ("Test",))
conn.commit()
c.close()
conn.close()

Пример программы, которая заканчивает печать постоянного количества записей (вместо того, чтобы печатать самое последнее количество записей). Мне удалось обновить счет, убив и перезапустив script, или открыв новое соединение каждый раз, когда выполняется оператор SELECT.

import MySQLdb

conn = MySQLdb.connect("localhost", "test", "test", "test")

while True:
    input = raw_input("Enter anything: ")
    if input == "exit":
        break

    c = conn.cursor()
    c.execute("SELECT COUNT(*) FROM test")
    res = c.fetchone()[0]
    c.close()

    print("Number of records: %d" % res)
4b9b3361

Ответ 1

Попробуйте это

import MySQLdb
import time

from MySQLdb.cursors import SSCursor
conn = MySQLdb.connect("localhost", "test", "test", "test")


while True:
    input = raw_input("Enter anything: ")
    if input == "exit":
        break
    c = conn.cursor()
    conn.begin()
    c.execute("SELECT COUNT(*) FROM test")
    res = c.fetchone()[0]
    #c.commit()
    c.close()

    print("Number of records: %d" % res)

Определение cursor заключается в сохранении данных до их изменения. Поэтому вы должны указывать курсор на begin ing или commit на ваше соединение. Это сообщит курсору, что вам нужно прочитать новые данные из базы данных.

Надеемся, что это решит ваш запрос.

Мы также изучаем новые вещи из вашего вопроса:).