您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python SQL execute加参数的原理

bubuko 2022/1/25 19:11:34 python 字数 1416 阅读 838 来源 http://www.bubuko.com/infolist-5-1.html

在Python中,当用pymysql库,或者MySQLdb库进行数据库查询时,为了防止sql注入,可以在execute的时候,把参数单独带进去,例如: def execute_v1(): config = { 'user': 'root', 'password': 'password1', 'hos ...

在Python中,当用pymysql库,或者MySQLdb库进行数据库查询时,为了防止sql注入,可以在execute的时候,把参数单独带进去,例如:

def execute_v1():
    config = {
        ‘user‘: ‘root‘,
        ‘password‘: ‘password1‘,
        ‘host‘: ‘127.0.0.1‘,
        ‘database‘: ‘selfmoe‘,
        ‘port‘: 3307,
        ‘charset‘: ‘utf8‘
    }

    import pymysql  # 打开数据库连接
    cnx = pymysql.connect(**config)
    cur = cnx.cursor()
    cur.execute(‘select title,id from post where title =%(title)s‘, dict(title="**‘*"))
    ret = cur.fetchall()
    print ret
    cur.close()
    cnx.close()
    return ret


execute_v1()

cur.execute(‘select title,id from post where title =%(title)s‘, dict(title="**‘*"))这行中,title这个参数是以args的形式传进去的
查看pymysql的源码发现,当有args参数时,pymysql会做以下逻辑:

  • 如果是入参是unicode,encode为utf8
  • 如果是字符串,在两边加单引号
  • 使用escape_string(from pymysql import escape_string)函数对字符串进行转义
  • 然后通过%来拼合字符串,得到最终的sql

所以

  • 使用args参数,其实和自己手动转义的效果是一样的,最终传给mysql的也是只有一个sql字符串。不过使用args可以把转义部分交给pymysql,这样安全性,稳定性更好,避免自己漏了转义,避免自己处理转义的异常情况。

Python SQL execute加参数的原理

原文:https://www.cnblogs.com/Xjng/p/14647404.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶