我只能从Blob中读取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的方法。 在DSN中传递 Database = dbname 似乎无效。