2016-08-21 7 views
1

私はPythonには新しく、私はpython経由でcassandraテーブルを更新しようとしています。私が次のコードを実行するとエラーが表示されます。Cassandra via python

type error not all arguments converted during string formatting 

エラー行を以下であった、次のコード、

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

「値」を持つフォーマットに何か問題があるのCassandraのテキスト列に格納された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" 
''' 

を使用すると、printコマンドと同じようにSQLインジェクションを防ぐために、%を使用していない、あなたのsession.execute()コマンドで、このコマンドを使用するには適切な逃避を保証する。あなたのcassandra python driverが推奨する構文を使用します。

は(文[パラメータ] [タイムアウト] [トレース] [、custom_payload])フィードバックのための

session.execute(command, jsonObjectNew) 
+0

こんにちは感謝を実行します。まだ同じエラーが発生しています。 'TypeError:文字列書式中にすべての引数が変換されませんでした。 ' – anoj

+0

修正が見つかりました。ありがとう。 – anoj