2012-06-22 96 views
0

我正在使用數據庫,而在column_x中有些變量爲NULL。由於有人不喜歡這個,我們決定將其更改爲'無'。現在我用下面的命令來更改在Python:SQL變量缺少引用

query = "update stone set results = 'None' where results is null;" 

但是當我做:

query = "SELECT * FROM stone where part = 'ABC';" 

我得到的輸出 'X', 'Y', 'Z',沒有」一個」

但是當我做:

query = "SELECT * FROM stone where part = 'ABC' and results = 'None';" 

我得到()返回。這可能是因爲'無'不存在。因此,很短的問題,如何通過Python更改None - >'None'?

+0

你使用了哪個數據庫? –

+0

一個標準的MySQL – Jasper

+0

這是要*總是*是你的模式('ABC'和'無')?如果沒有,使用參數將幫助解決這個問題另外,確保你正確地轉義字符串'None'。最後,您可能希望直接在數據庫上運行此查詢,以查看是否存在真正的*是*屬於您的搜索條件的結果集。 – swasheck

回答

0

我不確定是否當你說None時你的意思是空的。 如果您打算無意味着空,你可以使用這樣的事情(MYSQL):

SQL =「UPDATE石的結果集= \‘無\’,其中結果爲空」 光標= conn.Execute($ SQL) 行= cursor.Affected_Rows()

對於Oracle,執行該SQL:

SQL = 「UPDATE石組結果= '' 無 '',其中結果= '無'」 光標= conn.Execute( $ sql) rows = cursor.Affected_Rows()

For MySQL,你需要用一個反斜槓逃脫打勾 - 像

SQL = 「UPDATE石的結果集= \ '無\',其中成績= '無'」 光標= conn.Execute($ SQL) 行= cursor.Affected_Rows()

參見 http://phplens.com/lens/adodb/adodb-py-docs.htm http://www.codersrevolution.com/index.cfm/2008/7/13/Just-when-you-felt-safe-SQL-Injection- and-MySQL

+0

我不確定這是否與Python中的完全一樣,現在我已經作爲一個測試用例了:「UPDATE stone set results ='None2'where results ='None';」然而,這並沒有改變變量值... – Jasper

+0

我不確定當你說你沒有意味着空嗎?如果你打算使用None來表示空值,你可以使用像這樣的東西(MYSQL): sql =「UPDATE stone set results = \'None \'where results is null」cursor = conn.Execute($ sql)rows = cursor。 Affected_Rows() –

+0

我現在所做的是以下內容,我將NULL更改爲None,但是當我爲從NULL更改爲None的變量的select語句包含沒有引號時,因此None不像'None',因此無法找到當SELECT * FROM stone WHERE results ='None'...並且結果= None無法工作,因爲SQL不允許這樣做。我甚至試圖通過......將「無」更改爲其他東西......「更新stone set results ='None2'where results ='None';」但它不會改變......奇怪的... – Jasper