这里面是不是有个BUG,如一个id=1的,会不会id_str="11,12"而被误删除呢
时间: 2024-03-27 19:37:45 浏览: 21
是的,您说得没错。在原始代码中,如果 `jg` 列表中有多个元素,那么在使用 `join` 方法时会将这些元素拼接成一个字符串,导致可能会误删除其他的记录。这是一个潜在的风险。
为了避免这种情况,可以在 SQL 语句中使用参数化查询,并且使用占位符来代替手动拼接 SQL 语句。这样可以更安全地执行 SQL 语句,并且避免误删除其他记录的风险。
以下是修复这个问题的代码:
```python
sql = "SELECT id FROM zhize_xiangmu_to_unit WHERE id_zhize_xiangmu = %s"
co.to_sql(sql, (idxm,))
jg = cs.fetchall()
if jg:
ids = [str(j[0]) for j in jg]
id_str = ','.join(['%s'] * len(ids))
sql = "DELETE FROM luzhi_jilu_xijie WHERE id_xiangmu_unit IN ({})".format(id_str)
co.to_sql(sql, tuple(ids))
sql = "DELETE FROM luzhi_jilu_all WHERE id_zhize_xiangmu IN ({})".format(id_str)
co.to_sql(sql, tuple(ids))
conn.commit()
```
在上面的代码中,我们使用了 `%s` 占位符来构建 SQL 语句,并且使用 `tuple(ids)` 来传递参数。这样可以更安全地执行 SQL 语句,并且避免误删除其他记录的风险。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)