2017-12-15 21 views
0

PostgreSQL v9.4.12를 사용 중이며 jsonb 열을 업데이트하려고합니다. 개체의 특정 키가 아닌 전체 json 개체를 업데이트하려고합니다.작은 따옴표가 들어있는 json으로 PostgreSQL의 jsonb 필드를 업데이트하십시오.

파이썬 dict을 사용하여 객체를 저장하고 사용하기 전에 json.dumps()을 사용하여 json 형식의 문자열로 변환합니다. 그러나 json의 값은 업데이트를 시도하는 동안 psycopg2.ProgrammingError: syntax error을 던지는 작은 따옴표 '이 있습니다.

는 지금까지, 나는 시도했다 : new_data 내 DICT하고 jsonb_column는 JSON 데이터를 보관하는 컬럼의 이름입니다

"UPDATE table " 
"SET jsonb_column='{} ".format(json.dumps(new_data)) + "" 
"WHERE id='12345'" 

하는 것으로.

오류 내가 갖는 :

psycopg2.ProgrammingError: syntax error at or near "s"

LINE 1: ...code": "BR3", "short_description": "This property's price is...

           ^

내가 json.dumps()는 작은 따옴표를 탈출하지만 그런 경우가 될 것 같지 않습니다 가정했다. 이 오류를 극복 할 수있는 해결책이 있습니까?

미리 감사드립니다.

+0

jsonb? .. 9.3? 확실합니까? –

+0

죄송합니다. 제가 사용하고있는 9.4.12입니다. – christinabo

+0

문자열 안의 '{}'는 간단한 위치 형식입니다. https://pyformat.info/ – christinabo

답변

2

JSON은 작은 따옴표 매우 좋은이며, 예를 들면 :

t=# select $${"short_description": "This property's price is..."}$$::jsonb; 
         jsonb 
------------------------------------------------------ 
{"short_description": "This property's price is..."} 
(1 row) 

그래서 난 당신이 따옴표

+0

고마워, 내가 필요로했던 것이었다. 그것은 효과가 있었다. – christinabo

1

문자열 연결의 연습이와 문 구조화 예외를 방지하기 위해, 달러 기호 따옴표를 사용하여 시도 할 수 가정 좋은 습관이 아닙니다.

더 나은 방법은 documented in PsyCoPg2 docs입니다.

cur.execute("UPDATE table SET jsonb_column = %s WHERE id = %s", [ json, id ])