3

次のコードを使用して、Python 経由でテーブルに値を挿入しようとしています。

db = MySQLdb.connect(host="localhost",user="root",passwd="", db="x")
db.autocommit(True)
cur = db.cursor()
query = """INSERT INTO b (source_id,text,author,score,type,location) VALUES (%s,%s,%s,%s,%s,%s)""" % (1,Tweet.text,User.screen_name,score,search_type,User.location)
print query
cur.execute(query)

印刷出力のすべての変数値がクエリ文字列に適切に入力されていることがわかります (特殊文字は使用していません)。しかし、値は単にデータベースに挿入されていません。私のテーブルは次のようになります。

| freebee | CREATE TABLE `b` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`source_id` int(5) NOT NULL,
`text` varchar(255) NOT NULL,
`author` varchar(120) DEFAULT NULL,
`score` tinyint(3) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`start_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`end_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`type` enum('food','event','stuff') NOT NULL,
`location` varchar(120) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=latin1 |

特に、AUTO_INCREMENT は 132 に設定されています。数分前に挿入クエリを手動でテストしたところ、ID #132 として入力されました。これは、Pythonスクリプトを介して131回挿入しようとして失敗したことを意味すると思いますが、IDキーは増加し続けています。ありがとうございました。

4

2 に答える 2

6

あなたのコードが間違っているようです。

query = """INSERT INTO b (source_id,text,author,score,type,location) VALUES (%s,%s,%s,%s,%s,%s)"""
print query
cur.execute(query, (1,Tweet.text,User.screen_name,score,search_type,User.location))

または、のテキストは、のようVALUES(%s)に丸くする必要があります'** VALUES('%s', '%s') % (1, 2)

query = """INSERT INTO b (source_id,text,author,score,type,location) VALUES ('%s','%s','%s','%s','%s','%s')""" % (1,Tweet.text,User.screen_name,score,search_type,User.location)
print query
cur.execute(query)
于 2013-11-09T17:46:54.463 に答える
6

クエリが正しく ( Print ステートメントで確認)、データベース接続も問題ない場合は、このコマンドを実行してください。

db.commit()

cur.execute(query)の直後。または、設定することもできます

db.autocommit(True)

データベース接続を確立した後の Python スクリプトの先頭。

すべてのジョブが完了したら、コマンドを使用します

db.close()

データベース接続を終了します。これがうまくいくことを願っています。

于 2015-06-03T10:42:42.393 に答える