Я пытаюсь вставить строки в базу данных, которая имеет три столбца: публикации, публикации_год и авторов. Авторы поля имеют тип JSON []. В настоящее время у меня есть следующий код:
query = "INSERT INTO " + store_table_name + "( " + ",".join(tuple(key_types.keys())) + ") VALUES %s"
try:
# connect to the database
conn, cur = pg_connect(DB_OSP, db_host, db_user, db_password)
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
logger.info('Adding %s rows to %s' % (len(data), store_table_name))
execute_values(cur, query, data)
cur.close()
conn.commit()
# exception handling to follow
Данные - это список кортежей, где находится каждая запись (публикация, год публикации, авторы). Так, например, запись может выглядеть следующим образом:
('Sample Book', 2019, ['{"Author1_fname": "Billy", "Author1_lname": "Bob"}', '{"Author2_fname": "King", "Author2_lname": "Kong"}'])
Первоначально код не работает, поскольку существует несоответствие типов (он пытается вставить авторов в виде текстового массива вместо массива JSON ). Я попытался изменить массив на строковый тип, который тоже не работал. Я не совсем уверен, как явно добавить приведение «::: json []» с помощью execute_values. У кого-нибудь есть опыт в этом деле?