Ошибка вставки mysql как в python, так и в командной строке mysql

Я хочу вставить некоторые элементы в MySQL DB.

Когда я сделал это в своем скрипте Python, я получил:

Ошибка 1062: повторяющаяся запись "222" для ключа "product_code". product_code - это уникальное поле.

Когда я сделал это в командной строке mysql, я получил:

Ошибка 1205(HY000): превышено время ожидания блокировки; попробуйте перезапустить транзакцию.

Mysql установлен на win32; двигатель стола innodb.

код:

conn = mdb.connect(user = 'root', passwd = '[REMOVED]', db = 'vancl')
cur = conn.cursor()

sql2 = "insert into vancl.vancl_query1(product_code) values('100000')"
print sql2
cur.execute(sql2)

cur.close()

2 ответа

Решение

Теперь я воссоздаю таблицу так же, как предыдущий. В скрипте не сообщалось об ошибке, но на самом деле данные не вставляются. В командной строке вставка sql работает отлично.

Ваши данные не будут сохранены, если вы используете механизм транзакций, такой как InnoDB, потому что MySqlDb по умолчанию отключает автоматическую фиксацию. Чтобы сохранить данные в базе данных, вам нужно вызвать commit

conn = mdb.connect(user = 'root', passwd = '[REMOVED]', db = 'vancl')
cur = conn.cursor()

sql2 = "insert into vancl.vancl_query1(product_code) values('100000')"
print sql2

cur.execute(sql2)

//Commit the data
conn.commit() 

cur.close()

Это означает, что product_code столбец имеет уникальное ограничение индекса, помещенное на него. Ограничение уникального индекса сообщает MySQL, что поле не может иметь повторяющихся значений, то есть каждое поле должно быть уникальным. То, что вы получили, это ошибка "повторяющаяся запись" при попытке вставить значение 222 в product_code, когда это значение уже существует где-то в столбце.

Другие вопросы по тегам