Структурирование запроса JSON для API - PullRequest
0 голосов
/ 14 ноября 2018

Я создаю небольшой API для взаимодействия с нашей базой данных для других проектов.Я построил базу данных и у меня API работает нормально, однако данные, которые я получаю, не структурированы так, как я хочу.

Я использую Python с Flask / Flask-Restful для API.Вот фрагмент моего Python, который обрабатывает взаимодействие:

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 - этоидентификатор сайта, вот что я получу:

[
    "42",
    "5000 Robinson Centre Drive",
    "",
    "Pittsburgh",
    "PA",
    "15205",
    "(412) 787-1330",
    "(412) 249-9161",
    "",
    "Dick's Sporting Goods"
]

Вот как это структурировано в базе данных: enter image description here

В конечном итоге я бы хотелиспользовать имя столбца в качестве ключа в полученном 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)

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете просто преобразовать свой список в dict, а затем проанализировать его в строку JSON, прежде чем передать его обратно.

// These are the names of the columns in your database
>>> column_names = ["storeid", "address", "etc"]

// This is the data coming from the database.
// All data is passed as you are using SELECT * in your query
>>> data = [42, "1 the street", "blah"]

// This is a quick notation for creating a dict from a list
// enumerate means we get a list index and a list item
// as the columns are in the same order as the data, we can use the list index to pull out the column_name
>>> datadict = {column_names[itemindex]:item for itemindex, item in enumerate(data)}

//This just prints datadict in my terminal
>>> datadict

Теперь у нас есть именованный dict, содержащий ваши данные и имена столбцов.

{'etc': 'blah', 'storeid': 42, 'address': '1 the street'}

Теперь выгрузите объект данных в строку, чтобы его можно было отправить во внешний интерфейс.

>>> import json
>>> json.dumps(datadict)

Диктовка теперь преобразована в строку.

'{"etc": "blah", "storeid": 42, "address": "1 the street"}'

Это не потребует никаких изменений в вашей базе данных, но сценарий должен будет знать об именах столбцов или извлекать их динамически, используя некоторый SQL.

Если данные в базе данных имеют правильный формат для передачи втогда вам не нужно менять структуру базы данных.Если он был не в правильном формате, вы можете либо изменить способ его хранения, либо изменить свой SQL-запрос, чтобы манипулировать им.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...