2012-03-07 6 views
0

У меня есть странная проблема. Существует две базы данных. В нем есть все продукты для интернет-магазина. У другого есть программное обеспечение онлайн-магазина на нем и только активные продукты.Python | MySQLdb -> I can not insert

Я хочу взять значения из 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 НО, но нет новых строк в таблице2. Значение автоинкремента растет, но данных нет. И я даже не получаю сообщение об ошибке «can not insert» Значит, у кого-то есть идея, что может быть неправильно? (Если я делать вставки вручную через PHPMyAdmin это работает ... и если я просто взять SQL из моего сценария и сделать это вручную в SQL-заявления работать как хорошо)

EDIT: Нашел ответ здесь How do I check if an insert was successful with MySQLdb in Python?

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

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

ответ

5

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

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

http://mysql-python.sourceforge.net/FAQ.html#my-data-disappeared-or-won-t-go-away

+0

благодаря только узнал об этом сам в этой теме: http://stackoverflow.com/questions/9014233/python-and-mysqldb-how-do-i-check-if-an- insert-was-success –

+0

У меня никогда не было проблемы раньше. это действительно меня раздражает. Базы данных arent даже innodb они myisam. нет ли способа сделать так, как раньше? ^^ –

+0

@xMRW должен быть параметр настройки соединения, который устанавливает autocommit в значение true. Однако проявляйте осторожность, поскольку транзакции являются важной частью целостности db. –

Смежные вопросы