2013-11-09 79 views
2

我在嘗試使用下面的代碼通過Python將值插入表:MySQLdb的/ Python的INSERT查詢不將數據插入到表

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

好像你的代碼是不正確,應該是

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) 
+0

我已經更新,使更改包括''圍繞%s並且仍然沒有插入。 ('%s','%s','%s','%s,'%s','%s' ')「」「%(1,Tweet.text,User.screen_name,score,search_type,User.location) – tandy

+0

你關閉遊標嗎? – GCooper

+0

我明白了。在我最後給你的評論中,你可以看到我錯過了第四位佔位者。 (失敗)。它現在有效,無論是否關閉光標。我認爲,這個問題也與我之前許多嘗試的結果相結合,我不是自動提交的(在發送問題之前添加的)。謝謝! – tandy

1

如果您的查詢是正確的(查詢打印說明)和數據庫連接也行,請執行這個命令

db.commit() 

之後cur.execute(查詢)。或者,您也可以設置

db.autocommit(True) 

在進行數據庫連接後,您的python腳本開始。

一旦所有工作完成使用命令

db.close() 

終止數據庫連接。我希望這會對你有用。

相關問題