У меня есть объект json, полученный от сервера, который преобразуется в многомерный словарь python в приложении kivy. Этот словарь, в который я хочу вставить или обновить информацию о конфликте Sqlite3, используя executemany()
. Проблема в том, что я получаю near "ON": syntax error
. Может кто-нибудь подсказать, пожалуйста, как я могу решить эту проблему?
Я попытался удалить двоеточие из запроса VALUES
, а также получить только словарь dictionary.values (), но безуспешно.
Многомерный макет словаря:
arr = {0: {'empid': 0, 'empname': 'employee0', 'empnumber': 2000}, 1: {'empid': 1, 'empname': 'employee1', 'empnumber': 2001}, 2: {'empid': 2, 'empname': 'employee2', 'empnumber': 2002}, 3: {'empid': 3, 'empname': 'employee3', 'empnumber': 2003}, 4: {'empid': 4, 'empname': 'employee4', 'empnumber': 2004}, 5: {'empid': 5, 'empname': 'employee5', 'empnumber': 2005}, 6: {'empid': 6, 'empname': 'employee6', 'empnumber': 2006}, 7: {'empid': 7, 'empname': 'employee7', 'empnumber': 2007}, 8: {'empid': 8, 'empname': 'employee8', 'empnumber': 2008}, 9: {'empid': 9, 'empname': 'employee9', 'empnumber': 2009}, 10: {'empid': 10, 'empname': 'employee10', 'empnumber': 2010}}
Sqlite datatable:
import os
import sqlite3 as sl
def create_emp_table(self, cur):
cur.execute('CREATE TABLE IF NOT EXISTS emp_tb(\
emp_id INTEGER PRIMARY KEY NOT NULL,\
emp_names TEXT NOT NULL,\
emp_number TEXT NOT NULL UNIQUE)')
Sqlite-запрос:
def insert_emp_name_data_mult(self,conn, cur, arr):
sql_err = (sl.IntegrityError, sl.OperationalError, sl.ProgrammingError, sl.InterfaceError)
try:
query = "INSERT INTO emp_tb(emp_id, emp_names, emp_number)\
VALUES(:empid,:empname, :empnumber) ON CONFLICT (emp_id) DO UPDATE SET emp_names=excluded.emp_names, emp_number.excluded.emp_number"
cur.executemany(query, arr.values())
conn.commit()
return True
except self.sql_err as err:
print('error', err)
cur.close()
return False
Я бы хотел вставить или обновить таблицу, используя пару многомерного словаря ключ: значение максимально эффективно?