with open(savepath,'w',encoding='utf-8') as f: for index,row in df2.iterrows(): sql='Update dbo.[T_Road] Set Longitude_Tile=\'%s\',Latitude_Tile=\'%s\',Polyline_Tile=\'%s\',Longitude_TD=\'%s\',Latitude_TD=\'%s\',Polyline_TD=\'%s\',Longitude_BD=\'%s\',Latitude_BD=\'%s\',Polyline_BD=\'%s\',Longitude_GD=\'%s\',Latitude_GD=\'%s\',Polyline_GD=\'%s\',RoadLength=\'%s\' From [dbo].[T_Road] Where Id = \'%s\';\n'%(row['Longitude_Tile'],row['Latitude_Tile'],row['Polyline_Tile'],row['Longitude_TD'],row['Latitude_TD'],row['Polyline_TD'],row['Longitude_BD'],row['Latitude_BD'],row['Polyline_BD'],row['Longitude_GD'],row['Latitude_GD'],row['Polyline_GD'],row['RoadLength'],row['Id']) f.writelines(sql) 改成参数化查询
时间: 2024-01-22 18:03:19 浏览: 76
要将上述代码改为参数化查询,您可以使用 SQL Server 提供的参数化查询功能。下面是将您提供的代码改写为参数化查询的示例代码:
```python
with open(savepath, 'w', encoding='utf-8') as f:
for index, row in df2.iterrows():
sql = "UPDATE dbo.[T_Road] SET Longitude_Tile = ?, Latitude_Tile = ?, Polyline_Tile = ?, Longitude_TD = ?, Latitude_TD = ?, Polyline_TD = ?, Longitude_BD = ?, Latitude_BD = ?, Polyline_BD = ?, Longitude_GD = ?, Latitude_GD = ?, Polyline_GD = ?, RoadLength = ? WHERE Id = ?;\n"
params = (
row['Longitude_Tile'],
row['Latitude_Tile'],
row['Polyline_Tile'],
row['Longitude_TD'],
row['Latitude_TD'],
row['Polyline_TD'],
row['Longitude_BD'],
row['Latitude_BD'],
row['Polyline_BD'],
row['Longitude_GD'],
row['Latitude_GD'],
row['Polyline_GD'],
row['RoadLength'],
row['Id']
)
f.write(sql % params)
```
在上面的示例中,我们使用了参数化查询来替代原始的 SQL 语句中的值占位符。然后,我们通过 `%` 运算符将参数值插入到 SQL 语句中。
请注意,示例代码中的 `savepath` 是要写入 SQL 语句的文件路径。代码会遍历 `df2` 数据框中的每一行,并将参数化查询的 SQL 语句写入到文件中。
虽然我们使用了参数化查询,但请注意在将参数值写入文件之前,我们仍然使用了 `%` 运算符来格式化 SQL 语句。这是因为参数化查询通常在执行 SQL 查询时才会起作用,而不是在将 SQL 语句写入文件时。
如果您打算直接执行这些 SQL 语句而不是将它们写入文件,那么可以使用参数化查询来保护您的代码免受 SQL 注入攻击。但是,如果您只是将这些 SQL 语句写入文件,而不执行它们,那么无需过多担心 SQL 注入问题。
阅读全文