zoukankan      html  css  js  c++  java
  • Python MySQLdb 执行sql语句时的参数传递

    使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法。

    1.不传递参数

    conn = MySQLdb.connect(user="root",passwd="123456",host="192.168.101.23",db="cmdb")
    
    orange_id = 98
    sql = "select * from orange where id=%s" % orange_id
    
    cursor = conn.cursor(sql)
    cursor.execute()
        
    

    2.传递参数

    color = "yellow"
    sql = "select * from orange where color = %s"
    
    cursor.execute(sql, color)
    

    注意此处的占位符是%s,无论是字符串、数字或者其他类型,都是这个占位符。

    另外, %s不能加引号,如'%s', 这是错误的写法。

    与第一种写法,有什么区别呢?

    两者区别是对变量的解析:

    • 第一种写法,使用百分号%, 是用Python解释器对%s执行相应的替换。这种方法存在漏洞,有些时候不能正常解析,比如包含某些特殊字符,甚至会造成注入攻击的风险。

    • 第二种,变量是作为execute的参数传入的,由MySQLdb的内置方法把变量解释成合适的内容。

    一般情况下,建议使用第二种方法,把变量作为参数传递给execute

    3.使用字典dict类型传递参数

    sql = "select * from orange where %(color)s, %(weight)s"
    
    values = {"color": "yellow", "weight": 30}
    
    cursor.execute(sql, values)
    
    

    这种方式,传递的参数对应关系比较清晰。尤其是参数比较多时,使用字典,可以保证传递参数的顺序正确。

  • 相关阅读:
    第4章.计算节点
    Eclipse插件ViPlugin2.X的破解方法
    金刚经
    js
    C++ 重写重载重定义区别
    string::substr()简介
    信息熵与二进制
    一个简单的条件概率问题
    HPLINUX hplinux 安装升级 至 jdk1.8
    linux 解压命令
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/10850461.html
Copyright © 2011-2022 走看看