2011-08-31 40 views
2

當我嘗試插入多個變量時,我遇到MySQL和Python的MySQLdb問題。Python中的MySQL語句:變量不起作用

我有一個有三個字段的表字。第一個是auto_increment ID,第二個和第三個應該保存這些值。第二和第三個字段被命名爲word_id和url_id。

這是代碼。

cursor.execute("INSERT INTO wordurl (word_id, url_id) VALUES (%s, %s)", (word_temp_id, url_temp_id)) 

當我嘗試INSERT只有一個值的代碼工作,兩個沒有。

錯誤信息:周圍的聲明

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '),), (('2',),))' at line 1") 

我也特里普爾試了一下蜱,帶有或不帶變量,沒有字段名,並與第一ID字段包括在內。我也嘗試過使用C-style-printf-stuff%(這不是很聰明!)。沒有工作。

你們,光榮的人對計算器,你是我最後的希望:)

的MySQL服務器是5.5.9在FreeBSD 8.2。 Python版本是OSX Lion上的2.7:82508

在此先感謝!

斯特芬

更新:我使用cursor.fetchall()和cursor.fetchone()來獲取的ID。也許這個信息很重要。

+0

它似乎url_temp_id是空 –

+0

不,事實並非如此。如果我將該語句註釋掉並將其替換爲print,則表示「(((233L,),),((3L,),))」有兩個值。但是支架太多了吧? – Steffen

回答

0

關於你提到的更新:

據我所知: 使用fetchall()返回裏面的元組的元組。裏面的那些元組是你從fetchone()得到的。你可以像

fetchall() = (fetchone(), fetchtwo(), ...) 

並且fetchone還返回一個元組,它具有實際的變量值。這就是爲什麼你不能簡單地插入fetchall()的返回值。

只是爲了澄清:你粘貼的INSERT語句,是這樣的,當你的價值填補MAX_PRICE:

c.execute("""SELECT spam, eggs, sausage FROM breakfast WHERE price < %s""", (5,)) 

所以第一個%s被替換爲元組的第一個元素(5) 。您的插入語句如下所示:

cursor.execute("INSERT INTO wordurl (word_id, url_id) VALUES (%s, %s)", (((233L,),), ((3L,),))) 

我不能說得更清楚。

+0

我也嘗試過。這是行不通的。如果我打印它們,它看起來像這樣(((233L,),),((3L,),))'括號和逗號是有區別的。也許這是錯誤? – Steffen

+0

那裏有那些括號? o.O你是如何打印它們的? – naeg

+0

像這樣'print(word_temp_id,url_temp_id)' – Steffen

0

你試試這個:

cursor.execute("INSERT INTO wordurl (word_id, url_id) VALUES ('%s', '%s')" %(word_temp_id, url_temp_id))

這取決於你想插入哪些變量,但對字符串,這是必要的。

發現其中的差別:

>>> word_temp_id = "bla1" 
>>> url_temp_id = "bla2" 
>>> query = "INSERT INTO wordurl (word_id, url_id) VALUES (%s, %s)" %(word_temp_id, url_temp_id) 
>>> print query 
INSERT INTO wordurl (word_id, url_id) VALUES (bla1, bla2) 
>>> query = "INSERT INTO wordurl (word_id, url_id) VALUES ('%s', '%s')" %(word_temp_id, url_temp_id) 
>>> print query 
INSERT INTO wordurl (word_id, url_id) VALUES ('bla1', 'bla2') 
+0

我試了一下,但還是不行。該錯誤仍然相同。我想我在這裏有一個元組錯誤 – Steffen

+0

你究竟想要插入什麼?你可以粘貼一個word_tem_id和url_temp_id的例子嗎?提供他們的類型? – Gandi

+0

我嘗試插入一個整數(在tupel?)我通過'cursor.fetchall()'獲取。如果我打印它看起來像'((((233L,),),((3L,),))' – Steffen