首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL参数化查询

MySQL参数化查询
EN

Stack Overflow用户
提问于 2009-04-22 00:43:21
回答 7查看 163.8K关注 0票数 85

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

代码语言:javascript
复制
cursor.execute ("""
    INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
    VALUES
        (var1, var2, var3, var4, var5, var6)

""")

有人能帮我学一下这里的语法吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-22 01:35:26

注意不要对SQL查询使用字符串插值,因为它不会正确地转义输入参数,并且会使您的应用程序暴露在SQL注入漏洞之下。差异看似微不足道,但实际上却是巨大的

不正确(存在安全问题)

代码语言:javascript
复制
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))

正确(带转义)

代码语言:javascript
复制
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))

更让人困惑的是,用于绑定SQL语句中的参数的修饰符在不同的DB实现中各不相同,并且mysql客户端库使用printf样式语法,而不是更普遍接受的'?‘。记号(用于例如。python-sqlite)。

票数 275
EN

Stack Overflow用户

发布于 2009-04-22 01:04:31

您有几个可用的选项。您将希望熟悉python的字符串迭代。将来当你想知道这样的东西时,你可能会更成功地搜索这个术语。

更适合查询:

代码语言:javascript
复制
some_dictionary_with_the_data = {
    'name': 'awesome song',
    'artist': 'some band',
    etc...
}
cursor.execute ("""
            INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
            VALUES
                (%(name)s, %(artist)s, %(album)s, %(genre)s, %(length)s, %(location)s)

        """, some_dictionary_with_the_data)

考虑到您可能已经将所有数据放在一个对象或字典中,第二种格式更适合您。此外,当您必须在一年内更新此方法时,必须在字符串中计算"%s“的出现次数,这也很糟糕:)

票数 57
EN

Stack Overflow用户

发布于 2009-04-22 00:53:32

链接的文档给出了以下示例:

代码语言:javascript
复制
   cursor.execute ("""
         UPDATE animal SET name = %s
         WHERE name = %s
       """, ("snake", "turtle"))
   print "Number of rows updated: %d" % cursor.rowcount

因此,您只需将其应用于您自己的代码-示例:

代码语言:javascript
复制
cursor.execute ("""
            INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
            VALUES
                (%s, %s, %s, %s, %s, %s)

        """, (var1, var2, var3, var4, var5, var6))

(如果SongLength是数字,您可能需要使用%d而不是%s)。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/775296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档