【发布时间】:2019-04-17 13:01:47
【问题描述】:
我正在为其他项目构建一个小型 API 来与我们的数据库进行交互。我已经构建了数据库并且 API 运行良好,但是,我返回的数据不是我想要的结构。
我将 Python 与 Flask/Flask-Restful 一起用于 API。 这是我处理交互的 Python 的 sn-p:
class Address(Resource):
def get(self, store):
print('Received a request at ADDRESS for Store ' + store )
conn = sqlite3.connect('store-db.db')
cur = conn.cursor()
addresses = cur.execute('SELECT * FROM Sites WHERE StoreNumber like ' + store)
for adr in addresses:
return(adr, 200)
如果我向 /sites/42 端点发出请求,其中 42 是站点 ID,我将收到以下信息:
[
"42",
"5000 Robinson Centre Drive",
"",
"Pittsburgh",
"PA",
"15205",
"(412) 787-1330",
"(412) 249-9161",
"",
"Dick's Sporting Goods"
]
最终我想使用列名作为接收到的 JSON 中的键,但我需要一些正确方向的指导,所以我不会在谷歌上搜索模棱两可的术语,希望能找到一些东西。
这是我在向该端点发出请求后希望收到的示例:
{
"StoreNumber": "42",
"Street": "5000 Robinson Centre Drive",
"StreetSecondary": "",
"City": "Pittsburgh",
"State": "PA",
"ZipCode": "15205",
"ContactNumber": "(412) 787-1330",
"XO_TN": "(412) 249-9161",
"RelocationStatus": "",
"StoreType": "Dick's Sporting Goods"
}
我只是想获得一些指导,了解我是否应该更改我的数据在数据库中的结构(即我看到有些人只是将 JSON 放入他们的数据库中,但我认为这很混乱)或者是否有一个我可以使用更直观的方法来控制我的数据。
使用接受的答案更新代码
class Address(Resource):
def get(self, store):
print('Received a request at ADDRESS for Store ' + store )
conn = sqlite3.connect('store-db.db')
cur = conn.cursor()
addresses = cur.execute('SELECT * FROM Sites WHERE StoreNumber like ' + store)
for r in res:
column_names = ["StoreNumber", "Street", "StreetSecondary","City","State", "ZipCode", "ContactNumber", "XO_TN", "RelocationStatus", "StoreType"]
data = [r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]]
datadict = {column_names[itemindex]:item for itemindex, item in enumerate(data)}
return(datadict, 200)
【问题讨论】:
-
使用
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'YourTableName'获取列名 -
我创建了一个工具来帮助使用 json 公开数据库:github.com/thomaxxl/safrs