2014-04-14 149 views
0

我試圖將元素列表插入MySQL數據庫(到Blob列中)。這是我的代碼示例是:Python MySQL在Blob中插入和檢索列表

myList = [1345,22,3,4,5] 
myListString = str(myList) 
myQuery = 'INSERT INTO table (blobData) VALUES (%s)' 
cursor.execute(query, myListString) 

一切工作正常,我有我的列表存儲在我的數據庫中。但是,當我想檢索我的列表,因爲它現在是一個字符串,我不知道如何得到一個真正的整數列表,而不是一個字符串。

例如,如果現在我做:

myQuery = 'SELECT blobData FROM db.table' 
cursor.execute(myQuery) 
myRetrievedList = cursor.fetch_all() 
print myRetrievedList[0] 

我將獲得:中

[ 

代替:

1345 

有什麼辦法來改變我的字符串[1345 ,22,3,4,5]列入清單?

回答

0

按照OP,編輯他(她?)列出了作爲blob字段輸入的列表。在那種情況下,JSON似乎是更好的選擇。

import json 
... 
... 
myRetrievedList = cursor.fetch_all() 
jsonOfBlob = json.loads(myRetrievedList) 
integerListOfLists = [] 
for oneList in jsonOfBlob: 
    listOfInts = [int(x) for x in oneList] 
    integerListOfLists.append(listOfInts) 

return integerListOfLists #or print, or whatever 
+0

你的解決方案看起來不錯,但我有一個小問題。我撒謊讓問題看起來更容易,實際上我有一個列表清單。所以myList = [[1245,22,3,4,5] [1,2,3,4,5]]。那我該怎麼辦? – user3369214

0

你必須選擇你的列表中的數據格式,在我的優先順序常見的解決方案是:

  • json - 快速,可讀,允許嵌套數據,如果你的表是非常有用的曾被任何其他系統使用過。檢查blob是否有效格式。使用json.dumps()json.loads()來轉換字符串/ blob表示
  • repr() - 快速,可讀,適用於各種Python版本。如果有人進入你的數據庫不安全。用戶repr()eval()從字符串/ blob格式獲取數據
  • pickle - 快速,無法讀取,不能跨多種體系結構(afaik)工作。不檢查blob是否被截斷。使用cPickle.dumps(..., protocol=(cPickle.HIGHEST_PROTOCOL))cPickle.loads(...)來轉換您的數據。