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