我想从单个文件中的行中提取blob,并使用如下所示的Python代码:
connDB = psycopg2.connect(
database=strDbName, user=strUser, password=strPass,
host=strHost, port=strPort)
cur = connDB.cursor()
cmd = """
select id || '.pdf' as filename, blobColumn as binaryData
from someTable
"""
cur.execute(cmd)
while True:
row = cur.fetchone()
if row is None: break
print "Generating:", row[0]
open(row[0], 'w').write(row[1][:])
这很好,但是当表包含的行数超过500行时,我开始注意到启动脚本时的延迟-好像数据库正在预先“拍照”,然后“给”我这个图片。最终的结果是在一段时间内没有输出,然后水滴开始涌出。在
如果我的直觉是正确的:
select blobColumn where id=...
。这不是更好吗?在感谢您的任何提示-尽管这是关于Python、PostgreSQL和psycopg2的,但我还是很想知道这是否是针对DB引擎的,是否缺少了一些更好地使用psycopg2api等
尝试使用
named cursor
。它的默认值是psycopg2
为2000,但是由于您注意到了一个大约为500的阈值,请尝试将其设置得比这个低得多,比如100或200。您只需向游标构造函数提供名称参数即可。在named cursor
将允许psycopg2
通过为您设置服务器端cursor
自动成批查询。在Python
端,您只需像往常一样迭代,它将在必要时从服务器获取更多。在另外,查看大尺寸表的
query plan
,看看它们与小表有什么不同,这可能是很有启发性的。在如果使用
named cursor
,在运行execute
之后,只需iterate
而不是调用fetchone
或类似函数。在即
相关问题 更多 >
编程相关推荐