2016-08-21 2 views
1

저는 파이썬에 아주 익숙합니다. 파이썬을 통해 카산드라 테이블을 업데이트하려고합니다. 내가 다음과 같은 코드를 실행하면 오류가 나타납니다.카산드라 비아 파이썬 업데이트

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" 
''' 

는 인쇄 명령와 마찬가지로 SQL 주입을 방지하기 위해 %를 사용하지 않는, 당신의 session.execute() 명령이 명령을 사용하려면 적절한 도주를 보장해야합니다. 당신의 cassandra python driver에서 권장하는 구문을 사용

실행 (문을 [매개 변수] [타임 아웃] [추적], custom_payload]) 피드백에 대한

session.execute(command, jsonObjectNew) 
+0

안녕 주셔서 감사합니다. 여전히 같은 오류가 발생합니다. 'TypeError : 문자열 형식화 중에 모든 인수가 변환되지 않았습니다. ' – anoj

+0

수정 프로그램을 발견했습니다. 감사. – anoj