Python Upsert中的Pyodbc-SQL注入
我用过吗?用于传递Python中用于插入/更新的值列表的占位符 现在,我正试图利用这个工具来更新记录 代码: 问题是Python Upsert中的Pyodbc-SQL注入,python,python-3.x,pyodbc,upsert,Python,Python 3.x,Pyodbc,Upsert,我用过吗?用于传递Python中用于插入/更新的值列表的占位符 现在,我正试图利用这个工具来更新记录 代码: 问题是rows\u to\u insert具有带单引号的字符串值。我试图用\'替换单引号,但没有按预期工作。因为\”是Python的转义序列,而不是SQL的转义序列,所以不起作用。甚至用''替换也不起作用 由于我正在执行列表列表,不确定这里如何使用占位符?,我必须解决同样的问题,并将我的解决方案发布在您链接的帖子上-以下是我的回复链接:我必须解决同样的问题,并将我的解决方案发布在您链接的
rows\u to\u insert
具有带单引号的字符串值。我试图用\'
替换单引号,但没有按预期工作。因为\”
是Python的转义序列,而不是SQL的转义序列,所以不起作用。甚至用''
替换也不起作用
由于我正在执行列表列表,不确定这里如何使用占位符
?
,我必须解决同样的问题,并将我的解决方案发布在您链接的帖子上-以下是我的回复链接:我必须解决同样的问题,并将我的解决方案发布在您链接的帖子上-以下是我的回复链接:
table_name = 'ddf.ddf_actuals'
columns_list = df.columns.tolist()
columns_list_query = f'({(",".join(columns_list))})'
sr_columns_list = [f'Source.{i}' for i in columns_list]
sr_columns_list_query = f'({(",".join(sr_columns_list))})'
up_columns_list = [f'{i}=Source.{i}' for i in columns_list]
up_columns_list_query = f'{",".join(up_columns_list)}'
rows_to_insert = [row.tolist() for idx, row in final_list.iterrows()]
rows_to_insert = str(rows_to_insert).replace('[', '(').replace(']', ')')[1:][:-1]
query = f"MERGE INTO {table_name} as Target \
USING (SELECT * FROM \
(VALUES {rows_to_insert}) \
AS s {columns_list_query}\
) AS Source \
ON Target.stationcode=Source.stationcode AND Target.date=Source.date \
WHEN NOT MATCHED THEN \
INSERT {columns_list_query} VALUES {sr_columns_list_query} \
WHEN MATCHED THEN \
UPDATE SET {up_columns_list_query};"
c.execute(query)
c.commit()