Я мог прочитать только 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, похоже, не имеет никакого эффекта.