Как добавить значения списка из JSON в столбец sqlite

#python-3.x #sqlite

Вопрос:

Я получаю сообщение json через RabbitMQ и хочу сохранить его в базе данных.

Сообщение выглядит так:

 message ={
    "ticket": "ticket_12334345",
    "items" : ["item1","item2","item3"],
    "prices" : [10,20,15],
    "full price" : [45]
}
 

Хранение в базе данных выглядит следующим образом:

 def callback(ch, method, properties, body):
    print("%r" % body)
    body = json.loads(body)
    conn = sqlite3.connect('pythonDB.db')
    c = conn.cursor()
    c.execute('CREATE TABLE IF NOT EXISTS Table_3 (ticket TEXT, items TEXT, prices INTEGER,'
              'FullPrice INTEGER)')

    c.execute("INSERT INTO Table_3 VALUES(?,?,?,?)", (body["ticket"],
                                                    body["items"], body["prices"], body["full price"],
                                                    ))
    conn.commit()
 

Я получаю сообщение об ошибке sqlite3.Ошибка интерфейса: Параметр привязки ошибки 0 — возможно, неподдерживаемый тип.

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

Ответ №1:

Используйте функцию str (), например:

 def callback(ch, method, properties, body):
    print("%r" % body)
    body = json.loads(body)
    conn = sqlite3.connect('pythonDB.db')
    c = conn.cursor()
    c.execute('CREATE TABLE IF NOT EXISTS Table_3 (ticket TEXT, items TEXT, prices INTEGER,'
              'FullPrice INTEGER)')

    c.execute("INSERT INTO Table_3 VALUES(?,?,?,?)", (body["ticket"],
                                                    str(body["items"]), str(body["prices"]), str(body["full price"][0]),
                                                    ))
    conn.commit()