Как отправить данные JSON на бутылочный сервер и сохранить значение в sqlite3? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть JSON-файл data.json, который я хочу отправить через curl на сервер бутылок, который затем получает значения из файла.Проблема в том, что он ничего не хранит в базе данных.Как я могу сохранить значения, которые я передаю через файл JSON?

команда curl

curl -X POST -i -d @data.json --header "Content-Type: application/json" http://192.168.1.12:8080/

bottle.py

@route('/', method='POST')
def index():
    n1 = request.POST.get("maclist", "").strip()
    n2 = request.POST.get("signallist", "").strip()

    conn = sqlite3.connect('db/users.db')
    c = conn.cursor()
    c.execute("INSERT INTO users (MAC,SIGNAL) VALUES(?,?)", (n1,n2))

    conn.commit()
    return "Items added."

data.json

{
    "maclist": [
        "a1:b2:c3:d4:e5:f6"
    ],
    "signallist": [
        "-25"
    ]
}

1 Ответ

0 голосов
/ 30 мая 2019

Я не очень знаком с Bottlepy framework, но я думаю, что это решение для вас.

на стороне клиента

curl -X POST -i -d @data.json --header "Content-Type: application/json" http://192.168.1.12:8080/

на стороне сервера

@route('/', method='POST')
def index():
    body = request.body.read().decode('utf8') # read directly HTTP input
    get_dict = json.loads(body) # decode json and get native python dict
    maclist = get_dict.get('maclist', [])
    signallist = get_dict.get('signallist', [])
    data_list = list(zip(maclist, signallist)) # cast to list... You should have same number of elements in both collections (maclist, signallist). Otherwise, zip() function will take collection length which is less.
    conn = sqlite3.connect('db/users.db')
    c = conn.cursor()
    c.executemany("INSERT INTO users (MAC,SIGNAL) VALUES(?,?)", data_list)

    conn.commit()
    return "Items added."

Надеюсь ,,, это поможет тебе.

...