【问题标题】:Python - Format API Data for Writing to a Cloud DBPython - 格式化 API 数据以写入云数据库
【发布时间】:2015-03-12 07:37:23
【问题描述】:

我是 Python 新手。我使用我在 Github 上的 SDK 中找到的 API 调用成功地从基于 Web 的数据库中提取数据。数据恢复正常。我需要对其进行格式化,以便将其写回 AWS MySQL 数据库。

第 1 步 - API 查询:

这是我用来获取 API 数据的 Python 代码:

from infusionsoft.library import Infusionsoft
infusionsoft = Infusionsoft('APPNAME', 'API-SECRET-KEY')
table = 'Contact'
returnFields = ['Id', 'FirstName', 'LastName', 'Email', 'Leadsource']
query = {'FirstName' : 'John'}
limit = 5
page = 0
rawdata = infusionsoft.DataService('query', table, limit, page, query, returnFields)
print rawdata

返回的数据集如下所示:

[{'LastName': 'Marden', 'Leadsource': 'Phillips', 'Email': 'xxxxxxx@xxxxxxx.com', 'FirstName': 'John', 'Id': 602}, {'姓氏:'Macfeckno','Leadsource':'旧线索','电子邮件':'xxxxxxx@xxxxxxx.com','名字':'John','Id':722},{'LastName':'Donoghue ','Leadsource':'Phillips','Email':'xxxxxxx@xxxxxxx.com','FirstName':'John','Id':952},{'LastName':'Ostman','Leadsource': 'Phillips', 'Email': 'xxxxxxx@xxxxxxx.com', 'FirstName': 'John', 'Id': 1046}, {'LastName': 'Tassi', 'Leadsource': 'Classifieds', 'Email ':'xxxxxxx@xxxxxxx.com','FirstName':'John','Id':1070}]

第 2 步 - 写入数据库:

我的代码可以连接到我的数据库并将这些虚拟数据写入表:

import MySQLdb as mdb
con = mdb.connect(host = "HOSTNAME",user="USERNAME",passwd="PASSWORD", port=3306, db="DBNAME")
with con:
    cur = con.cursor()
    cur.execute("DROP TABLE IF EXISTS Writers")
    cur.execute("CREATE TABLE Writers(Id INT PRIMARY KEY AUTO_INCREMENT, \
             Name VARCHAR(25))")
    cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")

这显然只是我在教程中找到的示例代码,但与数据库的连接正在工作,正在创建表并且正在写入数据。

那么,如何遍历 API 调用返回的数据集并将其解析为适合写入数据库表的列和行?

谢谢

【问题讨论】:

    标签: python mysql-python


    【解决方案1】:

    您从 API 返回的原始数据是一个带有五个字典的 JSON 列表。 Python 具有对遍历 JSON 对象的内置支持,即您甚至不需要导入 json。

    python 中的标准 for 循环 允许您遍历列表。对于列表中的每个 dict,您都可以按名称访问所有键/值对(例如 writerObj["FirstName"])。

    from pprint import pprint
    rawdata = [{'LastName': 'Marden', 'Leadsource': 'Phillips', 'Email': 'xxxxxxx@xxxxxxx.com', 'FirstName': 'John', 'Id': 602}, {'LastName': 'Macfleckno', 'Leadsource': 'Old Leads', 'Email': 'xxxxxxx@xxxxxxx.com', 'FirstName': 'John', 'Id': 722}, {'LastName': 'Donoghue', 'Leadsource': 'Phillips', 'Email': 'xxxxxxx@xxxxxxx.com', 'FirstName': 'John', 'Id': 952}, {'LastName': 'Ostman', 'Leadsource': 'Phillips', 'Email': 'xxxxxxx@xxxxxxx.com', 'FirstName': 'John', 'Id': 1046}, {'LastName': 'Tassi', 'Leadsource': 'Classifieds', 'Email': 'xxxxxxx@xxxxxxx.com', 'FirstName': 'John', 'Id': 1070}]
    for writerObj in rawdata:
    #    pprint(writerObj)
    #    cur.execute("INSERT INTO Writers(Name) VALUES('" + writerObj["FirstName"] + ' ' + writerObj["LastName"] + "')")
        pprint("INSERT INTO Writers(Name) VALUES('" + writerObj["FirstName"] + ' ' + writerObj["LastName"] + "')")
    

    pprint 库只是将文本打印到屏幕上。注释掉的行“cur.execute(...”是您将在与数据库接口的代码中调用的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 2022-08-05
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多