2012-06-04 54 views
0

我在本網站和其他許多網站上搜索過高和低,並且發現了類似的問題,但沒有一個答案對我有用(通常只是考慮了元組)。我正在編寫一個python腳本來解析html頁面並填充數據庫。我幾乎一切工作,除了填充部分...MySQLdb執行

這裏是代碼段與MySQL數據庫交易(注:使用python的MySQLdb的模塊)

conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients") 
cur = conn.cursor() 
test = "Canned Corn" 
cur.execute("INSERT INTO food (name) VALUES (%s)", (test,)) 
conn.commit() 

我首先用解析的測試它字符串,但沒有工作。這給了我2個錯誤:

  1. 回溯(最近通話最後一個): 文件 「C:\ Python32 \ LIB \站點包\ MySQLdb的\ cursors.py」,線路171,在執行 R = self._query(query) 文件「C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py」,行330,in _query rowcount = self._do_query(q) 文件「C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py「,第294行,在_do_query中 db.query(q) _mysql_exceptions.ProgrammingError:(1064,」您的SQL語法錯誤 ;檢查與您的MySQL服務器版本爲正確的s yntax使用近 '%S)' 第1" 行)

  2. 回溯(最近通話最後一個): 文件 「C:\ Python32 \ LIB \站點包\ MySQLdb的\ cursors.py」,行171,在執行 r = self._query(query) 文件「C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py」,行330,in _query rowcount = self._do_query(q) File 「C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py」,第294行,在_do_query中 db.query(q) _mysql_exceptions.ProgrammingError :(1064,「您的SQL語法錯誤 ;檢查對應於你的MySQL服務器版本的正確s yntax在1" 號線附近使用「%S)」)手動

爲什麼這個查詢不行!?


更新:幾乎把我的頭髮拉出後,我決定回到2.7.3,並猜測什麼......現在一切正常了:D應該知道這是一種類型的錯誤......感謝幫助, !

+0

@ user145896是您的表中唯一的名稱列嗎? – jcho360

+0

也許嘗試捕捉字符串裏面,如下所示:str =「INSERT INTO food(name)VALUES」+ test然後cur.execute(str) –

+0

@ jcho360不,不過我可以只指定1列和SQL中的數據 – Odub

回答

1

我認爲你不需要任何棘手或高級的SQL;你只需要存儲並檢索一些東西。所以,我認爲ORM可能會讓你的生活變得更輕鬆。

我建議你嘗試使用ORM秋:

http://pypi.python.org/pypi/autumn/0.5.1

這是一個小而簡單的ORM,易於理解和使用。

另一個很好的和流行的ORM的Python是SQLAlchemy的:

http://www.sqlalchemy.org/

+0

感謝您的建議,嘗試SQLAlchemy並得到字面上相同的錯誤。我喜歡sqlalchemy,所以我現在使用它:) – Odub

-2

你應該寫你這樣的代碼:

conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients") 
cur = conn.cursor() 
test = "Canned Corn" 
cur.execute("INSERT INTO food (name) VALUES (%s)" % (test,)) 
conn.commit() 

如果你是新的蟒蛇,並有一定的編程經驗,然後按照Dive Into Python的書。免費。

+3

不使用%鉛到SQL注入? – Odub

+0

爲什麼你非常害怕sql注入。它是你的數據庫,你正在爲自己使用它(我希望如此)。 如果SQL注入可以在這裏應用然後,爲什麼不在你的代碼中使用逗號? – Manish

+3

@Manish - 嗯,你應該*總是*儘量防止SQL注入。 – RustyTheBoyRobot

2

我剛剛碰到了這個。很多周圍挖後,這個發現工作(注意變化值):

conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients") 
cur = conn.cursor() 
test = "Canned Corn" 
cur.execute("INSERT INTO food (name) VALUES ({0})", (test,)) 
conn.commit() 

背景信息:在MySQLdb的港口到Python 3張貼在一個unofficial Python packages網站,在遊標執行功能。 py被修改爲使用format()而不是%運算符。因此,爲什麼%s仍然在SQL語句中,而不是被替換。看起來這些更改從來沒有成爲official source的流行趨勢。

相關問題