1
я попытался адаптировать примеры here и hereКаков правильный способ вставки изображения в Postgres с помощью python?
import psycopg2
#Given media_id and image_url and conn object
image_data = urllib2.urlopen(image_url).read()
sql =("INSERT INTO images (media_id, data)
SELECT %s
WHERE
NOT EXISTS (SELECT media_id FROM images WHERE media_is = CAST(%s as TEXT) ")
data_insert_image = (media_id, psycopg2.Binary(image_data))
cursor.execute(sql_insert_image, data_insert_image)
conn.commit()
результатов:
TypeError: not all arguments converted during string formatting
Который имеет смысл для меня, как изображение не String
; однако я не знаю, как правильно вставить. Как следует выполнить вставку?
У вас есть два оператора SQL в вашем запросе. Я бы разделил их на две части. Оператор insert должен отлично работать с '' 'psycopg2.Binary''' – nathancahill
@nathancahill, разбивая его на два запроса, не разрешает ошибку типа на вставке изображения. – SMTF
. Вы делаете неправильный upsert там - это не будет работать перед лицом параллелизма. Мне не сразу понятно, почему Psycopg2 не нравится этот запрос; 'psycopg2.Binary (image_data)' действительно правильный подход для работы с данными bytea. Ваш запрос также вздор; 'INSERT' принимает' (media_id, data) ', но вы указали только аргумент' media_id' в 'SELECT'-list. –