Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 BLOB python3 fdb  [new]
CraMas
Member

Откуда:
Сообщений: 63
господа, такая проблема:
есть база, в ней хранятся фотки пользователей в одной из табличек
код пишу на питоне, но думаю проблем тут не должно быть

import fdb
con = fdb.connect(
    host='localhost', database='C:\db.gdb',
    user='sysdba', password='masterkey'
  )

cur = con.cursor()


SQL = "select * from photos_big"

cur.execute(SQL)

for (cli_n, photo) in cur:
    if cli_n == 10:
        filename = 'C:\\'+str(cli_n)+'_big.jpg'
        f2 = open(filename, 'wb')
        f2.write(photo)
        f2.close()
con.commit()
cur.close()
con.close()



этот код работает на ура.
а вот как записать в базу я не понимаю(((

вставляю кусок формирования запроса.

f2 = open(filename167n, 'rb')
photo = f2.read()
f2.close()

SQL = "insert into PHOTOS(CLI_N, PHOTO) Values((%s,%s)" % ('3', photo)

cur.execute(SQL)


и в момент cur.execute(SQL) вылетает ошибка.
я конечно понимаю что пихать в таком виде бинарные данные не лучший вариант, и поэтому наверное это и не работает

подскажите плз, как записать BLOB в поле

заранее огромное спасибо всем кто откликнется
18 сен 17, 19:15    [20804444]     Ответить | Цитировать Сообщить модератору
 Re: BLOB python3 fdb  [new]
Alexander A. Sak
Member

Откуда: Омск
Сообщений: 878
А так?
f2 = open(filename167n, 'rb')
SQL = "insert into PHOTOS(CLI_N, PHOTO) Values(?, ?)"
cur.execute(SQL, (3, f2))

# и закрыть все конечно же


Вот тут https://www.firebirdsql.org/file/documentation/drivers_documentation/python/fdb/usage-guide.html#executing-sql-statements сказали
автор
You may pass BLOB values as open file-like objects, and FDB will handle the transfer of BLOB value.
18 сен 17, 19:30    [20804471]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить