微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql-python 中的 +<str_name> + 是什么意思?

如何解决mysql-python 中的 +<str_name> + 是什么意思?

考虑代码

mycursor.execute("insert into patients values('"+str(patient)+"','"+name+"','"+age+"','"+gender+"','"+date+"')")

--其中患者、姓名、年龄、性别、日期为变量

我有 3 个问题:

这里有两个+是什么? 为什么这里有两个引号(单引号和双引号)?

代码是否有其他替代方法(不使用 +)?

解决方法

您代码中的 + 不是 MySQL 特有的。它用于将 Python 字符串连接在一起。您需要两个引号,因为一个(单引号)用于分隔 SQL 字符串,另一个(双引号)用于分隔 Python 字符串。

>>> name = "john"
>>> age = 55
>>> "insert into people values ('"+name+"','"+str(age)+"')"
"insert into people values ('john','55')"

但是,您永远不要对 SQL 查询使用字符串连接。它使您容易受到所谓的 SQL 注入的攻击,您可以在其中操纵查询,例如,使其删除条目而不是插入。

>>> name = "'); drop table people; --"
>>> age = ""
>>> "insert into people values ('"+name+"','"+str(age)+"')"
"insert into people values (''); drop table people; --','')"

(obligatory XKCD)

相反,您应该使用数据库驱动程序库提供的语法在查询中安全地插入值。在 Python 中,您的代码可以重写为:

mycursor.execute("insert into patients values(%s,%s,%s)",(str(patient),name,age,gender,date))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?