如何在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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何从列表项中删除单引号

如何在postgresql中插入引号[重复]

当字符串在双引号内有单引号时,如何在Javascript中将此字符串转换为JSON对象

在android中将数据传递给json时单引号不起作用

Postgres无法将单引号和分号一起插入问题[重复]

c#中将单引号字符串转换为uint [重复]