我使用 Pyodbc 连接到 sqlserver 以获取几行。我执行的选择查询获取了近 200,000 行,导致内存问题。
为了解决这个问题,我使用生成器对象,在任何时间点获取 5000 行..
这种执行的问题是生成器对象。我丢失了数据列名称..
例如,如果我的 table1 有列 NAME,通过正常执行我可以访问结果集作为 result.NAME
但我不能对生成器对象做同样的事情。它不允许我通过列名进行访问。
任何输入都会有用吗?
用于批量Cursor.fetchmany()
处理查询结果返回一个pyodbc.Row
对象列表,允许按列名引用。
以 SQL Server 查询为例,该查询以 5 个为一组返回数据库名称:
connection = pyodbc.connect(driver='{SQL Server Native Client 11.0}',
server='localhost', database='master',
trusted_connection='yes')
sql = 'select name from sys.databases'
cursor = connection.cursor().execute(sql)
while True:
rows = cursor.fetchmany(5)
if not rows:
break
for row in rows:
print row.name
def rows(cursor, size=5):
while True:
rows = cursor.fetchmany(size)
if not rows:
break
for row in rows:
yield row
connection = pyodbc.connect(driver='{SQL Server Native Client 11.0}',
server='localhost', database='master',
trusted_connection='yes')
sql = 'select name from sys.databases'
cursor = connection.cursor().execute(sql)
for row in rows(cursor):
print row.name