python - MySQL 参数化查询

标签 python mysql bind-variables

我很难使用 MySQLdb 模块将信息插入我的数据库。我需要在表中插入 6 个变量。

cursor.execute ("""
    INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
    VALUES
        (var1, var2, var3, var4, var5, var6)

""")

有人可以帮我解决这里的语法吗?

最佳答案

小心在 SQL 查询中使用字符串插值,因为它不会正确转义输入参数,并且会使您的应用程序容易受到 SQL 注入(inject)漏洞的影响。 差异可能看起来微不足道,但实际上差异很大

不正确(存在安全问题)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))

正确(带转义)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))

它增加了困惑,用于在 SQL 语句中绑定(bind)参数的修饰符在不同的 DB API 实现之间有所不同,并且 mysql 客户端库使用 printf 样式语法而不是更普遍接受的 '? '标记(例如 python-sqlite 使用)。

关于python - MySQL 参数化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50932144/

相关文章:

python - 编写一个带数字并返回其对应月份缩写的基本程序

python - 解码 RFC 2231 header

oracle - 在 SQL Plus 中使用绑定(bind)变量返回多行?

mysql - 在mysql中获取一周的最后一个值

java - 不能在 DDL 语句中使用绑定(bind)变量。备择方案?

sql - 使用 :1, :2, :3 等的 PL/SQL 代码

python - 使用矢量化 pandas 函数将多个项目添加到行,而不是 iterrows?

python - 使用Python访问MySQL时如何检索Google Cloud-SQL中的列名称?

php - 复选框的只读属性

javascript - 如何将 Google Maps V3 距离结果保存到 MySQL 数据库?