Как я могу избежать повторения данных в sqlite3 на основе curl POST-запросов? - PullRequest
0 голосов
/ 01 июня 2019

Я делаю веб-приложение, которое состоит из извлечения данных из нескольких rpis.Они работают как точка доступа Wi-Fi, которая отправляет через curl POST data.json (MAC-адреса и уровень сигнала каждого подключенного устройства).

bottle.py сохраняет эту информацию в базе данных sqlite3, вставляя или заменяя ее в зависимости от того, является ли устройство новым или изменило уровень сигнала.По сути, bottle.py работает как сервер, и все rpi являются клиентами (rp1, rpi2, ...), которые отправляют информацию через curl каждые 10 секунд.В базе данных есть разные таблицы (table1, table2 ...), в которых хранятся устройства каждого rpi.

Если устройство отключается от rpi1 и подключается к rpi2, то rpi1 не отправляет информацию об этом устройстве, а тот, кто это делает, в то время как это устройство больше не находится в таблице1, и оно будет вТаблица 2.Итак, как я могу иметь действующую базу данных, которая печатает эту информацию как можно более актуальной?Константа вставляет и удаляет?

bottle.py

@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))
    conn = sqlite3.connect('db/users.db')
    c = conn.cursor()
    try:
        c.executemany("INSERT INTO users (MAC,SIGNAL) VALUES(?,?)", data_list)
    except Exception as exc:
        c.executemany("REPLACE INTO users (MAC,SIGNAL) VALUES(?,?)", data_list)


    conn.commit()
    return "Items added."

@route('/data', method='GET')
def index():
    conn = sqlite3.connect('db/users.db')
    c = conn.cursor()
    c.execute('SELECT * FROM users')
    return template('simple.tpl', rows = c.fetchall())

data.json

{
    "maclist": [
        "b6:a2:23:39:b5:27",
        "b1:a2:0b:37:4c:22"
    ],
    "signallist": [
        "-50",
        "-10"
    ]
}

users.db

MAC                SIGNAL
b6:a2:23:39:b5:27  -50       
b1:a2:0b:37:4c:22  -10
...