如何在python中将单引号存储到postgres [重复]
Posted
技术标签:
【中文标题】如何在python中将单引号存储到postgres [重复]【英文标题】:How to store single quote to postgres in python [duplicate] 【发布时间】:2021-06-18 17:50:07 【问题描述】:当我将数据从 json 响应存储到 postgresql 时出现错误。 python中如何用单引号存储数据?
我的 json 响应:
"status": 2,
"records": 1,
"message": "OK",
"id": "131",
"name": "SUPA'AT",
"address": "RUNGKUT SA'GIRI"
我的python代码:
sql = "UPDATE my_data SET name='"+str(response["name"])+"', address='"+str(response["address"])+"' WHERE id='"+id+"'"
cursor.execute(sql)
conn.commit()
【问题讨论】:
在更进一步之前。您需要停止像这样创建 SQL 查询。这是主要的 SQL 注入材料。您需要使用参数化查询。 owasp.org/www-community/attacks/SQL_Injection 如果您使用psycopg
docs
涵盖您的确切问题以及如何正确参数化您的查询。 psycopg.org/docs/…
@PacketLoss 谢谢先生,我是 python 新手,将使用参数化查询
@NirAlfasi 的意思是先将单引号替换为双引号?
【参考方案1】:
改为这样做:
sql = "UPDATE my_data SET name = %s, address = %s WHERE id = %s"
cursor.execute(sql, response["name"], response["address"], id)
conn.commit()
假设您之前在某处分配了id
。
您共享的代码是 SQL 代码注入的噩梦,如 cmets 中的 @PacketLoss 所示,并在 https://owasp.org/www-community/attacks/SQL_Injection 上进行了解释
【讨论】:
您会发现这样更安全、更易于阅读,而且还可以解决单引号问题,因为cursor.execute()
会为您适当地转义它。以上是关于如何在python中将单引号存储到postgres [重复]的主要内容,如果未能解决你的问题,请参考以下文章