2017-02-10 33 views
2

我必須從python刪除一些日期從mysql。 我有超過2000年的表。所以,我需要完成此代碼...我不能通過單擊我的鼠標來處理這一點。我真的需要幫助。python- mysql錯誤當我使用%s執行

好,我的猜測是這樣

sql ="delete from finance.%s where date='2000-01-10'" 

def Del(): 
for i in range(0,len(data_s)): 
    curs.execute(sql,(data_s[i])) 
    conn.commit() 

Howerver,這是行不通的。

我只是 當我只是這樣鍵入,它的作品。

>>> query="delete from a000020 where date ='2000-01-25'" 

>>> curs.execute(query) //curs=conn.cursor() 

但是,如果我添加%s到語法,它不工作..

>>> table='a000050' 

>>> query="delete from %s where date ='2000-01-25'" 

>>> curs.execute(query,table) 

ProgrammingError: (1064, u"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 ''a000050' where date ='2000-01-25'' at line 1") 

它不工作過。

>>> curs.execute(query,(table)) 

ProgrammingError: (1064, u"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 ''a000050' where date ='2000-01-25'' at line 1") 

有點不同......但是相同。

>>> curs.execute(query,(table,)) 

我看了從這裏的許多問題,但僅僅通過增加(),或不固定的... 因爲我對Python和MySQL的初學者,我真的需要你的幫助。謝謝你的閱讀。

+0

錯誤消息告訴你,你的'table' var已經插入到用引號'''括起來的字符串中。這可能是通過'curs.exe.exe()'函數完成的,以避免注入問題,但是如果以編程方式執行,則可以在將字符串傳遞給函數之前對其進行格式化。 – jbndlr

回答

0

我有同樣的問題,我固定通過附加爲:

def Del(): 
for i in range(0,len(data_s)): 
    x = "delete from finance." + data_s[i] + "where date='2000-01-10'" 
    print x # to check the sql statement :) 
    curs.execute(x) 
    conn.commit() 
+0

謝謝你幫我 – JsYun

0

好問題,看看MySQLdb User's Guide

paramstyle

字符串常量聲明的類型參數標記格式爲 預期的接口。設置爲'格式'= ANSI C printf格式 代碼,例如'... WHERE name =%s'。如果映射對象用於 conn.execute(),那麼接口實際上使用'pyformat'= Python 擴展格式代碼,例如, '... WHERE name =%(name)s'。但是,API 目前不允許在 參數樣式中指定多個樣式。

請注意,傳遞給execute()的查詢字符串中的任何文字百分號必須轉義,即%%。

參數佔位符只能用於插入列值。他們 不能用於SQL的其他部分,如表​​名, 報表等

希望這有助於。

+0

真的很對。大聲笑 – JsYun