Вставьте строку JSON в столбец таблицы PostgreSQL - PullRequest
0 голосов
/ 13 ноября 2018

Попытка вставить следующую строку JSON без форматирования

str={
    "Trial": {
        "@id": "xxxxx",
        "key1": "aaaaaaaa (BAL-8557) aaaaaaaaaaaaaaaaaa",
        "key2": "aaaaaaaaaaaaa , aaaaaaaaaaaaaaaaaaa",
        "key3": "Yes",
        "key4": "No",
        "key5": {
        "key5": [{
                    "@type": "ABC",
                    "$": "ABC121 "
                },
                {
                    "@type": "ABC",
                    "$": "ABC12133 "
                }]
        },
        "Indications": {
            "Indication": {
                "@id": "1308",
                "$": "aaaaaa"
            }
        }
    }
}

в следующую базу данных PostgreSQL

CREATE TABLE records
(
  id text,
  record json
) 

Код, который я использую для выполнения операции вставки

cur = conn.cursor()
cur.execute("INSERT INTO trial_records(id, record) VALUES (%s, %s)", ('1', json.dumps(json.loads(str))))

Ошибка:

the JSON object must be str, bytes or bytearray, not 'dict' 

Это правильный синтаксис для хранения строки json как части столбца

1 Ответ

0 голосов
/ 13 ноября 2018

json.loads(obj) создает объект json из строковых данных.

json.dumps(obj) создает строку из объекта json.

Таким образом, вы должны изменить json.dumps(json.loads(str)) на json.dumps(str).

PS: Я бы также не рекомендовал называть ваши переменные в качестве имен типов, таких как str, int.Вы делаете str() и int() вызов невозможным из текущей области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...