Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Pyodbc迭代行_Python_Pyodbc - Fatal编程技术网

Python 使用Pyodbc迭代行

Python 使用Pyodbc迭代行,python,pyodbc,Python,Pyodbc,我使用Pyodbc返回大量行,这些行被转储到JSON中并发送到服务器。我想迭代我的SQL表并返回所有记录。我现在正在使用cursor.fetchall(),程序返回一条记录。如下图所示。当我使用fetchone时,返回一个错误AttributeError:“unicode”对象没有属性“SRNUMBER”并且fetchmany也返回一条记录。如何成功返回所有记录?我正在使用Python 2.6.7 代码: fetchall和fetchmany的输出: { "MetaData": {},

我使用Pyodbc返回大量行,这些行被转储到JSON中并发送到服务器。我想迭代我的SQL表并返回所有记录。我现在正在使用cursor.fetchall(),程序返回一条记录。如下图所示。当我使用
fetchone
时,返回一个错误
AttributeError:“unicode”对象没有属性“SRNUMBER”
并且
fetchmany
也返回一条记录。如何成功返回所有记录?我正在使用Python 2.6.7

代码:

fetchall和fetchmany的输出:

{
    "MetaData": {}, 
    "SRData": {
        "FirstName": "MyLAG", 
        "LastName": "ThreeEleven", 
        "ParentNumber": "021720151654176723", 
        "SRNUMBER": "1-3580171"
    }
}

首先,这条线

objects_list.append(d)
需要在for循环内部,而不是外部。

使用我的答案中的代码为
输出['SRData']
的值构建一个字典列表,然后JSON将
输出编码为正常值

import pyodbc
import json

connstr = 'DRIVER={SQL Server};SERVER=server;DATABASE=ServiceRequest; UID=SA;PWD=pwd'
conn = pyodbc.connect(connstr)
cursor = conn.cursor()

cursor.execute("""SELECT SRNUMBER, FirstName, LastName, ParentNumber FROM MYLA311""")

# build list of column names to use as dictionary keys from sql results
columns = [column[0] for column in cursor.description]

results = []
for row in cursor.fetchall():
    results.append(dict(zip(columns, row)))

output = {"MetaData": {}, "SRData": results}

print(json.dumps(output, sort_keys=True, indent=4))

值得一提的是,如果内存中可以容纳的行太多,fetchall()将无法工作。
import pyodbc
import json

connstr = 'DRIVER={SQL Server};SERVER=server;DATABASE=ServiceRequest; UID=SA;PWD=pwd'
conn = pyodbc.connect(connstr)
cursor = conn.cursor()

cursor.execute("""SELECT SRNUMBER, FirstName, LastName, ParentNumber FROM MYLA311""")

# build list of column names to use as dictionary keys from sql results
columns = [column[0] for column in cursor.description]

results = []
for row in cursor.fetchall():
    results.append(dict(zip(columns, row)))

output = {"MetaData": {}, "SRData": results}

print(json.dumps(output, sort_keys=True, indent=4))