2016-08-21 92 views
1

我很新的python,我想通過python更新cassandra表。當我運行代碼時出現以下錯誤。更新卡桑德拉通過python

type error not all arguments converted during string formatting 

誤差在下面的行,有什麼錯誤與下面的代碼的格式,

session.execute('UPDATE CourseAssignment SET value = \'%s\' WHERE key = \'SYSTEM\'', (jsonObject)) 

「值」是存儲在卡桑德拉的文本列JSON對象。

jsonObjectNew = json.dumps(jsonObject, indent=4, sort_keys=True) 

回答

0

錯誤是因爲您的字符串格式不正確。在這種情況下,它會更好,在很多行拆分命令可讀性:

command = """ 
UPDATE "CourseAssignment" 
SET "value" = '%s' 
WHERE "key" = "SYSTEM" 
""" 

使用三引號,不需要進行轉內報價。

現在,將您JSON對象,你可以這樣做:

import json 
jsonObject = {"one": 1, "two": [1, 10], "three": "string", "four": {"other":"etc."}} 
jsonObjectNew = json.dumps(jsonObject, indent=4, sort_keys=True) 

print(command % jsonObjectNew) 

''' prints: 
UPDATE "CourseAssignment" 
SET "value" = '{ 
    "four": { 
     "other": "etc." 
    }, 
    "one": 1, 
    "three": "string", 
    "two": [ 
     1, 
     10 
    ] 
}' 
WHERE "key" = "SYSTEM" 
''' 

要在session.execute()命令使用此命令,不要使用%爲您的打印命令做,以防止SQL注入並確保正確逃脫。使用您的cassandra python driver推薦的語法:

執行(語句[,參數] [,超時] [,跟蹤] [,custom_payload])

session.execute(command, jsonObjectNew) 
+0

嗨感謝您的反饋意見。仍然得到相同的錯誤。 'TypeError:並非在字符串格式化過程中轉換的所有參數' – anoj

+0

找到修復程序。謝謝。 – anoj