使用 Pyodbc 迭代行
Iterating rows with Pyodbc
我正在使用 Pyodbc return 一些行,这些行被转储到 JSON 并发送到服务器。我想遍历我的 SQL table 和 return 所有记录。我现在用的是cursor.fetchall()
,程序return是一条记录。如下所示。当我使用 fetchone
时,错误是 returned AttributeError: 'unicode' object has no attribute 'SRNUMBER'
和 fetchmany
returns 一条记录。我如何成功return所有记录?我正在使用 Python 2.6.7
代码:
import pyodbc
import json
import collections
import requests
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 """)
rows = cursor.fetchone()
objects_list = []
for row in rows:
d = collections.OrderedDict()
d['SRNUMBER']= row.SRNUMBER
d['FirstName']= row.FirstName
d['LastName']= row.LastName
d['ParentNumber']= row.ParentNumber
objects_list.append(d)
output = {"MetaData": {},
"SRData": d}
print output
j = json.dumps(output)
print json.dumps(output, sort_keys=True, indent=4)`
fetchall 和 fetchmany 的输出:
{
"MetaData": {},
"SRData": {
"FirstName": "MyLAG",
"LastName": "ThreeEleven",
"ParentNumber": "021720151654176723",
"SRNUMBER": "1-3580171"
}
}
首先,行
objects_list.append(d)
需要在 for 循环内部,而不是外部。
使用我的答案 here 中的代码为 output['SRData']
的值构建字典列表,然后 JSON 正常编码 output
字典。
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))
我正在使用 Pyodbc return 一些行,这些行被转储到 JSON 并发送到服务器。我想遍历我的 SQL table 和 return 所有记录。我现在用的是cursor.fetchall()
,程序return是一条记录。如下所示。当我使用 fetchone
时,错误是 returned AttributeError: 'unicode' object has no attribute 'SRNUMBER'
和 fetchmany
returns 一条记录。我如何成功return所有记录?我正在使用 Python 2.6.7
代码:
import pyodbc
import json
import collections
import requests
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 """)
rows = cursor.fetchone()
objects_list = []
for row in rows:
d = collections.OrderedDict()
d['SRNUMBER']= row.SRNUMBER
d['FirstName']= row.FirstName
d['LastName']= row.LastName
d['ParentNumber']= row.ParentNumber
objects_list.append(d)
output = {"MetaData": {},
"SRData": d}
print output
j = json.dumps(output)
print json.dumps(output, sort_keys=True, indent=4)`
fetchall 和 fetchmany 的输出:
{
"MetaData": {},
"SRData": {
"FirstName": "MyLAG",
"LastName": "ThreeEleven",
"ParentNumber": "021720151654176723",
"SRNUMBER": "1-3580171"
}
}
首先,行
objects_list.append(d)
需要在 for 循环内部,而不是外部。
使用我的答案 here 中的代码为 output['SRData']
的值构建字典列表,然后 JSON 正常编码 output
字典。
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))