Питон | MySQLdb -> я не могу вставить - PullRequest
0 голосов
/ 07 марта 2012

У меня странная проблема.Есть две базы данных.В нем есть все товары для интернет-магазина.На другом есть программное обеспечение интернет-магазина и только активные продукты.

Я хочу взять значения из db1, изменить некоторые значения в python и вставить в db2.

db1.execute("SELECT * FROM table1")
for product in db1.fetchall():
    # ...
    db2.execute("INSERT INTO table2 ...")
    print "Check: " + str(db2.countrow)

Так что я могу получить значения с помощью select, даже выбор из db2 не проблема.Мой чек всегда дает мне 1 НО, в таблице нет новых строк.Значение автоинкремента растет, но данных нет.И я даже не получаю сообщение об ошибке типа «не могу вставить». У кого-нибудь есть идея, что может быть не так?(если я делаю вставку вручную через phpmyadmin, это работает ... и если я просто беру sql из моего скрипта и делаю это вручную, то sql-инструкции работают также)

EDIT: нашел ответ здесь Как я могу проверить, была ли вставка успешной с MySQLdb в Python?

Есть ли способ заставить их выполняться без фиксации каждый раз?У меня есть оболочка для mysqldb, и она отлично работает для меня, меняя поведение с коммитом, мне нужно внести некоторые большие изменения.

EDIT2: хорошо, я обнаружил, что db1 - это MyISAM (который будет работать без коммитов)и db2 - это InnoDB (который на самом деле, кажется, работает только с коммитом), я думаю, мне нужно также изменить db2 на MyISAM.

1 Ответ

5 голосов
/ 07 марта 2012

Попробуйте добавить db2.commit() после вставок, если вы используете InnoDB.

Начиная с 1.2.0, MySQLdb по умолчанию отключает автокоммит, как того требует стандарт DB-API (PEP-249).Если вы используете таблицы InnoDB или какой-либо другой тип транзакционной таблицы, вам необходимо выполнить connection.commit () перед закрытием соединения, иначе ни одно из ваших изменений не будет записано в базу данных.

http://mysql -python.sourceforge.net / faq.html # мои-данные исчезли или завоеванный-трет-гоу одноразовый

...