使用pyodbc生成器中缺少列名

时间:2013-04-17 14:13:56

标签: python generator pyodbc

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

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

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

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

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

任何输入都有用吗?

1 个答案:

答案 0 :(得分: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

使用生成器(从样本here修改)

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