【问题标题】:How to loop through records to send single POST request to server?如何遍历记录以将单个 POST 请求发送到服务器?
【发布时间】:2015-06-03 23:23:09
【问题描述】:

我有一个 SQL 表,我正在循环通过它为每条记录向服务器发送一个发布请求。所有记录都应该是单独的 JSON。

我期待这样的事情:

while there are rows in table:
write the number of rows as json and output files.

while there are rows being written as jsons and output files:
server is pinged for the number of jsons and output files.

如果objects_list.append(d) 在循环中并且fetchmany 更改为fetchall 所有记录都作为一个json 对象返回,我想遍历表并将每条记录作为单个json 发送到服务器在下面的结构中。因此,当所有记录都被写入为 json 对象并通过请求发送到服务器时,遍历表并打破循环。

示例 JSON { "MetaData": {}, "SRData": { "SRNumber": "1-3580671" } }

我正在使用 Pyodbc 迭代我的表并提取我想发送到服务器的记录。

我的脚本返回第一条记录,我想遍历表并在 where 子句定义的特定时间范围内返回 X 条记录。

如何将每一行成功返回为单个 JSON 以 ping 其发送到的服务器?

代码:

import pyodbc
import json
import collections
import requests
import time
import logging
import httplib
import datetime
import logging
import logging.handlers


start = time.time()

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

cursor.execute("""SELECT SRNUMBER FROM MYLA311 """)
rows = cursor.fetchmany()



objects_list = []
for row in rows:
     d = collections.OrderedDict()
     d['SRNumber']= row.SRNUMBER



objects_list.append(d)

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

print output

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


objects_file = 'C:\Users\Administrator\Desktop\JSONOutput.txt'
f = open(objects_file,'w')

url = "https://myla311.lacity.org/myla311router/mylasrbe/1/UpsertSANSR"
headers = {'Content-type': 'text/plain', 'Accept': '/'}
r = requests.post(url, data= json.dumps(output), headers=headers,  verify=False)

print 'It took', time.time()-start, 'seconds.'

print r.text

conn.close()

输出:

{
    "MetaData": {}, 
    "SRData": {
        "SRNumber": "1-3140751"
    }
}
{"status":{"code":311,"message":"Service Request Successfully updated","cause":""},"Response":{"PrimaryRowId":"1-1VBF3","ListOfServiceRequest":{"ServiceRequest":[{"SRNumber":"1-3140751"}]}}}

【问题讨论】:

    标签: sql-server json python-requests pyodbc


    【解决方案1】:

    如果将cursor.fetchmany() 更改为cursor.fetchall() 是否有效?另外,如果您将objects_list.append(d) 放在 for 循环中并设置

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

    【讨论】:

    • 不,相同的输出,我认为它比这更复杂一些,似乎我需要一个 while 循环来输出我的输出,将表中的每一行作为新的 JSON 对象迭代并写入一个新的目标文件。
    • 如果将 objects_list.append(d) 放在 for 循环中会怎样?
    • 不,我想你在想我想将表中的所有记录作为单个 JSON 返回,我想将表中的所有记录作为单个 JSON 返回。
    • 好的,所以我想你想将 objects_list 传递给输出。不过,您仍然需要将它放在 for 循环中。
    • 查看编辑,我想遍历整个表并将每一行作为 JSON 发送到服务器并在最后一条记录处中断循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多