我正在使用pyodbc来更新Access数据库。
我需要UPSERT的功能。
ON DUPLICATE KEY UPDATE
在Access SQL中不存在,REPLACE
不是一个选项,因为我想保留其他字段。
有很多建议如何解决,所以这是 我把它放在一起的解决方案:
for table_name in data_source:
table = data_source[table_name]
for y in table:
if table_name == "whatever":
SQL_UPDATE = "UPDATE {} set [Part Name] = '{}', [value] = {}, [code] = {}, [tolerance] = {} WHERE [Unique Part Number]='{}'".\
format(table_name,y['PartName'],y['Value'],y['keycode'],y['Tolerance'], y['PartNum'])
SQL_INSERT = "INSERT INTO {} ([Part Name],[Unique Part Number], [value], [code], [tolerance]) VALUES ('{}','{}','{}',{},{},{});".\
format(table_name,y['PartName'],y['PartNum'],y['Value'],y['keycode'],y['Tolerance'])
elsif ....
9 more tables....
res = cursor.execute(SQL_UPDATE)
if res.rowcount == 0:
cursor.execute(SQL_INSERT)
我必须说,我不是Python专家,而且我没有设法理解基本概念,也没有理解SQL的魔力, 所以我可以在这里一起谷歌。
我不喜欢上面的解决方案,因为它很难阅读并且难以维护(我必须为~10个不同的表格)。另一点是我必须使用2个查询,因为我没有设法理解并运行我发现的任何其他UPSERT方法。
有没有人建议我如何以更智能,更易于维护的方式做到这一点?