Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Upsert中的Pyodbc-SQL注入_Python_Python 3.x_Pyodbc_Upsert - Fatal编程技术网

Python Upsert中的Pyodbc-SQL注入

Python Upsert中的Pyodbc-SQL注入,python,python-3.x,pyodbc,upsert,Python,Python 3.x,Pyodbc,Upsert,我用过吗?用于传递Python中用于插入/更新的值列表的占位符 现在,我正试图利用这个工具来更新记录 代码: 问题是rows\u to\u insert具有带单引号的字符串值。我试图用\'替换单引号,但没有按预期工作。因为\”是Python的转义序列,而不是SQL的转义序列,所以不起作用。甚至用''替换也不起作用 由于我正在执行列表列表,不确定这里如何使用占位符?,我必须解决同样的问题,并将我的解决方案发布在您链接的帖子上-以下是我的回复链接:我必须解决同样的问题,并将我的解决方案发布在您链接的

我用过吗?用于传递Python中用于插入/更新的值列表的占位符

现在,我正试图利用这个工具来更新记录

代码:

问题是
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()