Не получается сделать загрузку файла в одну строку в поле bytea
пытаюсь создать и загрузить файл размером в 600 мб в postgresql в одну строку в поле bytea следующим кодом:
import psycopg2
import os
conn = psycopg2.connect(dbname='databae', user='db_user',
password='mypassword', host= 'localhost')
cursor = conn.cursor()
# создаю файл размером в 600 мб
fileSize = os.urandom(600(1024*2))
# пытаюсь поместить файл в postgresql в поле bytea
cursor.execute("INSERT INTO bytea (fileSize) VALUES (%s, %s) RETURNING id", (fileSize()))
получаю ошибку при создании файла и при загрузке его в базу данных
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
-
fileSize = os.urandom(600(1024*2))Тут 2 ошибки:600(...)это использование объектаintкак вызываемый объект, типа функции, что неверно- Подправим, добавим умножение
600 * (1024*2)это тоже неправильно, чтобы были МБ нужно в степень 2 возвести 1024:600 * (1024 ** 2)
-
cursor.execute("INSERT INTO bytea (fileSize) VALUES (%s, %s) RETURNING id", (fileSize()))- В запросе у вас в таблицу
bytesзаполняется один столбецfileSize, а передаете значения для 2 столбцов(%s, %s) fileSize()это будет такая же проблема как сint, вот только вfileSizeбудут байты(fileSize()))тут нужно использовать кортеж, просто добавление скобок не сделает кортеж, нужны элементы и запятые, например(1)это простоint, а(1,)это кортеж из одногоint, и(1,2)это кортеж на 2int, соответственно должно быть так:(fileSize,)
- В запросе у вас в таблицу
Итого:
import psycopg2
import os
conn = psycopg2.connect(dbname='databae', user='db_user',
password='mypassword', host= 'localhost')
cursor = conn.cursor()
# создаю файл размером в 600 мб
fileSize = os.urandom(600 * (1024 ** 2))
# пытаюсь поместить файл в postgresql в поле bytea
cursor.execute("INSERT INTO bytea (fileSize) VALUES (%s) RETURNING id", (fileSize,))