0

誰かが私を助けてくれることを願っていますか?Python 2.7 と MySQLdb ライブラリを使用して MySQL データベースにデータを入力しようとしています。以下のサンプル スクリプトを作成しましたが、何を試しても動作しません。

コードはエラーなしで実行され (コードを実行すると「完了」と出力されますが、それだけです)、phpMyAdmin で直接クエリを実行すると正常に動作しますが、何らかの理由で Python 内から動作させることができません。

私は何かを逃しましたか?動作させるためにphpMyAdminでアクティブにする必要があるものはありますか? 私は午後のほとんどを答えを求めて探し回っていますが、他の人が同様の問題を抱えていますが、エラーメッセージが表示される傾向があります (私はそうではありません)。

import MySQLdb

# Define the database access details
DB_HOST = "localhost"
DB_USER = "username"
DB_PASSWORD = "secretpassword"
DB_NAME = "TestDatabase"

# Establish the connection to the database
db = MySQLdb.connect(
                     host=DB_HOST,
                     user=DB_USER,
                     passwd=DB_PASSWORD,
                     db=DB_NAME
                     )
cur = db.cursor()

Query = "INSERT INTO SearchResults ( `TimeStamp`, `SearchTerm`, `SearchResult`) VALUES ('2013-06-22 17:28:09', 'TestSearchTerm', 'Test Search Result');"
cur.execute(Query)

print"Done"

初めての経験なので見落とし等ありましたらご容赦ください!どんな助けでも大歓迎です!

4

1 に答える 1

2

あなたはおそらくcommit()あなたの変更をしなければなりません。


これはあなたの「最初の経験」なので、いくつかの説明:

「データベース エンジン」の機能によっては、データを変更しても、変更内容が「外部」にすぐに表示されない場合があります。大まかに言えば、変更はデータベース接続に対して「非公開」です。

これは非常に重要な機能です。とりわけ、これには、いくつかの変更を行うことができ、それらを一度に「公開」できるという利点があります。もう 1 つの利点は、ある時点で変更が無効であると判断した場合、データベースの他のユーザーを邪魔することなく変更を「キャンセル」できることです。

その小さな欠点の 1 つは、変更を公開する準備ができたら、変更を明示的にコミットする必要があることです。そうしないと、接続が閉じられると消えてしまいます。また、「自動コミット」を設定する機会も必要です。つまり、DB への各リクエストの後に暗黙的なコミットが行われます。必要に応じて、これはオプションになる可能性があります。要約する:

  • 変更を DB に「公開」するには: db.commit(), を使用します。
  • DB への変更を「キャンセル」するには:db.rollback()コミットせずに接続を使用するか、単に閉じます。
  • 各リクエストの後に暗黙的にコミットするには:db.autocommit(True)

DBA やその他のデータベースの専門家は、上記の段落を単純化しすぎていると怒鳴るでしょう。しかし、何が起こっていたのかを理解するのに役立つことを願っています!

于 2013-06-22T17:23:09.333 に答える