我有一个从服务器接收的json对象,它在kivy应用程序中被转换成python多维字典。我要使用executemany()
将此字典插入Sqlite3数据表或在发生冲突时更新它。问题是我收到了near "ON": syntax error
。有人能告诉我如何解决这个问题吗?
我试着从查询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数据表:
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
我想使用多维字典插入或更新表键:值对尽可能高效?你知道吗
您使用的UPSERT表示法是在3.24版本中添加到Sqlite的,您使用的是3.22,它不理解语法。你知道吗
在旧版本上工作的另一种方法是使用
INSERT OR REPLACE
。从the documentation:所以,试着用
但是,由于您的
emp_number
列是UNIQUE
,因此它的作用不会完全相同,因为如果冲突,替换也会触发,而不仅仅是emp_id
主键发生冲突。你得自己决定这是不是个问题。你知道吗相关问题 更多 >
编程相关推荐