Почему не работает INSERT INTO с pymysql?

Не получается выполнить простую SQL команду с помощью модуля pymysql, а например, SELECT работает.
Вот основной скрипт:
from connect import get_connection
import pymysql

connection = get_connection()
c = connection.cursor()
sql = "INSERT INTO test (id, name) VALUES (10, 'test')"
c.execute(sql)
connection.close()

Вот connect:
import pymysql.cursors  
# Подключиться к базе данных.
def get_connection():
	connection=pymysql.connect(host='localhost',
                             user='root',
                             password='', 
                             db='test',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)
	print ("Успешное подключение к базе данных!\n\n\n")
	connection.commit()
	return connection
  • Вопрос задан
  • 858 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Я не знаю, что такое PyMySQL, но сеть даёт совет:
connection = get_connection()
c = connection.cursor()
sql = "INSERT INTO test (id, name) VALUES (10, 'test')"
c.execute(sql)
connection.commit()
connection.close()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Возможно там уже есть запись с id=10
Ошибки не выдает?
Ответ написан
@Andy931
Ваша проблема в том, что connection.commit() выполняется ДО запроса c.execute(sql), а должен выполняться ПОСЛЕ, т.к. commit() подтверждает те изменения, которые произошли в базе, как бы фиксирует их.
import pymysql
def get_connection():
  connection=pymysql.connect(host='localhost', user='root', password='',  db='test', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
  print ("Успешное подключение к базе данных!\n\n\n")
  return connection

connection = get_connection()
c = connection.cursor()
sql = "INSERT INTO test (id, name) VALUES (10, 'test')"
c.execute(sql) # <<<--------- сперва добавляете данные в базу
connection.commit() # <<<--------- затем изменения подтверждаете (сохраняете)
connection.close()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы