2012-03-07 11 views
0

私は奇妙な問題があります。 2つのデータベースがあります。 1つはオンラインショップのためのすべての製品を持っています。もう1人は、オンラインショップのソフトウェアとアクティブな製品のみを持っています。Python | MySQLdb - >挿入できません

私はdb1から値を取得し、Pythonでいくつかの値を変更し、db2に挿入したいと思います。

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

私は選択から値を得ることができるので、db2から選択することも問題ありません。私の小切手は常に私に1を与えますが、テーブル2には新しい行はありません。オートインクリメント値は大きくなりますが、データはありません。 そして、私は "couldnt insert"のようなエラーを受け取っていません。 だから誰も何が間違っているかもしれないという考えを持っていますか?

EDITを(私はphpMyAdminのを経由して、手動で挿入を行う場合、それは動作します...と私はちょうど私のスクリプトからSQLを取り、それを行う場合は、手動でSQL-文はaswell働く):ここで答えHow do I check if an insert was successful with MySQLdb in Python?

が見つかりました毎回コミットせずに実行する方法はありますか? 私はmysqldbの周りにラッパーを持っており、それは私のために完全に動作します、コミットで振る舞いを変えて、大きな変更を加える必要があります。

EDIT2:ok私はdb1がコミットせずに動作するMyISAMであり、db2はInnoDB(実際はコミットでのみ動作するように思われる)であることを知った。私はMyISAMにも同様にdb2を変更しなければならないと思う。

答えて

5

InnoDBを使用している場合は、挿入後にdb2.commit()を追加してみてください。

MySQLdbは1.2.0から、デフォルトで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-successful –

+0

私はこれまでに問題がなかった。それは実際には本当に私を悩ます。データベースは、彼らがmyisamであるというわけでもない。以前と同じようにする方法はありませんか? ^^ –

+0

@xMRW autocommitをtrueに設定する接続設定パラメータが必要です。トランザクションはdbの完全性の重要な部分であるので、注意してください。 –

関連する問題