Python MySQL кэшируется на стороне Python - PullRequest
0 голосов
/ 21 апреля 2020

все, я действительно не знаю, как решить мою проблему, я думаю, что это ошибка кеша (памяти). Я проверяю подключение запущенного python локально к Google Clou SQL - MYSQL с использованием CloudProxy

Я столкнулся с проблемой, когда идентификатор автоинкремента в моей таблице сбрасывается со стороны python Локально, я очень новичок в этом.

То, что я сделал, было

  1. удалил connection.commit () из кода, чтобы проверить, может ли он вставить в облако SQL без коммита ( )
  2. запускал файл python несколько раз, данные отображались в локальном терминале, но не в облачной базе данных
  3. вставил connection.commit () обратно в код и запустил
  4. каким-то образом идентификатор автоинкремента начался в том месте, где python ушел, а не из облака SQL.

ID пользователя был 11 с обеих сторон, я удалил connection.commit () и нажал кнопку "Выполнить" Несколько раз он показывал вывод базы данных локально с вставкой, затем я проверял, что облако SQL не получало никакой вставки, поэтому я вставил connection.commit () обратно в код. Я играл с .commit ()

Когда я нажимаю снова запустить с connect.commit (), вывод показывает, что userID начинался с 22 на локальном и облачном SQL, но это должно быть 12.

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

Я сделал снимки экрана моего терминала и базы данных Cloud SQL, вот мой код.

import mysql.connector

connection = mysql.connector.connect(host='127.0.0.1',
                             user='root',
                             password='root',
                             db='account')
con = connection.cursor()

firstname = "Test123"
lastname = "Test123"
phone = "1234567890"
email = "yi@gmail.com"
address1 = "RMIT Street"
address2 = "Melbourne"
postcode = "1234"
state = "VIC"
username = "test111"
password = "abc123"

#userid will auto increment
statement = "INSERT INTO user (firstname, lastname, phone, email, address1, address2, postcode, state, username, password) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
value = (firstname,lastname,phone,email,address1,address2,postcode,state,username,password)

con.execute(statement,value)
connection.commit()


con.execute("select * from user")
for a,b,c,d,e,f,g,h,i,j,k in con.fetchall():
    print (a,b,c,d,e,f,g,h,i,j,k)

Terminal Output CloudSQL database

1 Ответ

0 голосов
/ 21 апреля 2020

Это не проблема Python, как ожидается. Кажется, у вас были неудачные операции вставки, и InnoDB фактически является транзакционным механизмом.

Пример - Сессия A вставляет запись 1 Сессия B вставляет запись 2 Сессия C вставляет запись 3 Сессия D завершилась неудачно и откатывается, а теперь следующая будет ID на вставке будет 4, но 3 не будет ..

См. -

{ ссылка }

...