Это моя схема таблицы,
[column] [type]
tablename json
word varchar
text json
Я реализовал с помощью psycopg2 с Python,
cur.execute("INSERT INTO json (word,text) VALUES (%s,%s);",(word,text))
слово содержит тип объекта списка, но внутри строки,
['a','b','c']
текст содержит тип объекта списка, но внутри находится dict (json),
[{'a':'b'},{'c':'d'}]
Когда я запускаю функцию. Я получил эту ошибку ниже,
" can't adapt type 'dict' "
Вопрос в том, как вставить json в postgreSQL, как вы видите тип текста. Это похоже на dict, но как присвоить текстовой переменной значение json? или я что-то упускаю?
json.dumps()
можно использовать для переключения на строку для базы данных.
import json
postgres_string = json.dumps(text)
# Save postres_string into postgress here
# When you want to retrieve the dictionary, do so as below:
text = json.loads(postgres_string)
Ну, вы используете функцию execute
для выполнения SQL, просто создайте правильный SQL, он будет успешным. Вы хотите вставить данные типа json, просто используйте «::», чтобы преобразовать тип строки в тип json, как показано ниже, это работает:
postgres=# insert into json_test(word,text) values('abcd_word','[{"a":"b"},{"c":"d"}]'::json);
INSERT 0 1
postgres=#
postgres=# select * from json_test ;
tablename | word | text
-----------+-----------+-----------------------
| abcd_word | [{"a":"b"},{"c":"d"}]