проблема чтения Sybase BLOB с помощью Sybpydb - PullRequest
0 голосов
/ 01 июля 2019

Я мог прочитать только 32 768 байт из большого двоичного объекта.Как читать остальное?

import sybpydb

conn = sybpydb.connect(servername='...', dsn='Charset=iso_1;BulkLogin=true;Database=...;chainxacts=off', user='...', password='...')

cur.execute('USE ...')
cur.execute('SELECT blob_column FROM table_name')

l, = cur.fetchone()
xml = bytearray()
while True:
    b = bytearray(1024)
    n = l.readinto(b)
    if n is None: break
    xml.extend(b[:n])

print(len(xml))

Я получаю усеченные данные, не могу найти способ прочитать остальное.

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc20155.1570127/doc/pdf/ocs_nfb.pdf говорит о том, как обрабатывать усеченноехотя данные на C (стр. 167).

SQLSetStatementAttr(stmt, SQL_ATTR_LOBLOCATOR_FETCHSIZE, (SQLPOINTER)32768, 0);

Не могу найти способ сделать то же самое с помощью python / sybpydb.

Я также пытался использовать объемный курсор:

cur = conn.blkcursor()
# cur.execute('USE ...') <-- How to set the DB name with bulk cursor?
cur.copy('table_name', direction='out')
row = cur.roxfer()

Эта таблица с ошибками не найдена.С помощью обычного курсора я выполняю оператор USE , чтобы установить имя базы данных.Не могу найти способ сделать это с blkcursor.Передача Database = dbname в DSN, похоже, не имеет никакого эффекта.

...