0

我使用 Pyodbc 连接到 sqlserver 以获取几行。我执行的选择查询获取了近 200,000 行,导致内存问题。

为了解决这个问题,我使用生成器对象,在任何时间点获取 5000 行..

这种执行的问题是生成器对象。我丢失了数据列名称..

例如,如果我的 table1 有列 NAME,通过正常执行我可以访问结果集作为 result.NAME

但我不能对生成器对象做同样的事情。它不允许我通过列名进行访问。

任何输入都会有用吗?

4

1 回答 1

2

用于批量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
于 2013-04-17T15:48:53.527 回答