Посмотрите на следующий пример в документации MySQL connector-python для вставки .Не используйте format
для подготовленных вами параметров оператора, вместо этого передайте их в качестве второго аргумента execute
.В этом примере показана передача данных как в виде кортежа, так и в виде dict:
from __future__ import print_function
from datetime import date, datetime, timedelta
import mysql.connector
cnx = mysql.connector.connect(user='scott', database='employees')
cursor = cnx.cursor()
tomorrow = datetime.now().date() + timedelta(days=1)
add_employee = ("INSERT INTO employees "
"(first_name, last_name, hire_date, gender, birth_date) "
"VALUES (%s, %s, %s, %s, %s)")
add_salary = ("INSERT INTO salaries "
"(emp_no, salary, from_date, to_date) "
"VALUES (%(emp_no)s, %(salary)s, %(from_date)s, %(to_date)s)")
data_employee = ('Geert', 'Vanderkelen', tomorrow, 'M', date(1977, 6, 14))
# Insert new employee
cursor.execute(add_employee, data_employee)
emp_no = cursor.lastrowid
# Insert salary information
data_salary = {
'emp_no': emp_no,
'salary': 50000,
'from_date': tomorrow,
'to_date': date(9999, 1, 1),
}
cursor.execute(add_salary, data_salary)
# Make sure data is committed to the database
cnx.commit()
cursor.close()
cnx.close()
Кроме того, вам, вероятно, необходимо вызвать commit
, поскольку в документации указано
С по умолчанию Соединитель/ Python отключает автокоммит, а MySQL 5.5 и выше по умолчанию использует транзакционные таблицы InnoDB, необходимо зафиксировать ваши изменения, используя метод commit () соединения.Вы также можете выполнить откат, используя метод rollback ().
Редактировать:
Я не уверен, почему у вас все еще возникают проблемы с запросомБудучи ненадлежащим образом сбежавшим, я максимально точно воспроизвел ваши условия, и он отлично работает:
Таблица:
MariaDB [pets]> DESCRIBE myTable;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| col1 | varchar(50) | NO | | NULL | |
| col2 | varchar(100) | NO | | NULL | |
+-------+--------------+------+-----+---------+-------+
Код Python:
import mysql.connector
cnx = mysql.connector.connect(user='cody', password='secret', database='pets')
cursor = cnx.cursor()
a = 'val1'
b = 'val2'
query = "insert into myTable values (%s, %s)"
cursor.execute(query, (a,b))
cnx.commit()
print(cursor._executed)
cursor.close()
cnx.close()
Программавыполняется успешно и печатает выполненный запрос, как и ожидалось:
cody@servo:~$ python mysql-test.py
insert into myTable values ('val1', 'val2')
И строка вставляется:
MariaDB [pets]> SELECT * FROM myTable;
+------+------+
| col1 | col2 |
+------+------+
| val1 | val2 |
+------+------+
1 row in set (0.01 sec)