zoukankan      html  css  js  c++  java
  • pymysql以表名作为变量传递进查询语句中

    1

    在使用cursor.execute(sql, param)时,pymysql库会自动转义含有%s的字符串,所以不要画蛇添足在SQL语句中给%s加引号了,会报1064的错误滴!

    另外也有许多人使用有SQL注入隐患的cursor.execute(sql % param)这种用法,这样是可以给%s加引号的。

    2

    在我们学习使用pymysql的时候有时需要把表名当做变量传递到sql语句中去执行,
    然而我们的固定思维模式有时却限制了我们:
    如:我们知道传递变量可以用占位符%s,后面加上变量就行,
    在pymysql中也有同样的问题,我们在执行sql语句的时候可以把变量传递进去
    类似:

    sql = 'insert into TabName + ' value (%s %s)'
    cursor.execute(sql, [name,age])
    

    如果我们的TabName也是变量的话我们就会习惯性的这样加

    sql = 'insert into %s + ' value (%s %s)'
    cursor.execute(sql, [tabname,name,age])
    

    然后这样报错了我们才知道这样不行,然后再去查原因,发现我们被自己的固定思维给限制住了(反正我是这样的)

    我也是在网上找了半天再找到了解决办法,只要跳出这样的思维就行了

    错误:
    sql = 'insert into %s + ' value (%s %s)'
    cursor.execute(sql, [tabname,name,age])
    
    改为:
    sql = 'insert into %s(name,age)' %TabName + ' value (%s)'
    cursor.execute(sql, [name])
    

    这样就没问题了,有时候我们是能解决这类似的问题的,但是我们却是往往被自己的固定思维给坑了!

    python在mysql存储图片二进制文件

    SQL 操作用字符串拼接不是一个好的习惯(这样会有sql注入的风险), 试试用参数化查询:

    find_binary=pymysql.Binary(img_data)            #使用Binary()函数来指定存储的是二进制
    add_row = """INSERT INTO IMGS(ID,IMG,编号,DATAIMG) VALUES($s, %s, %s, %s)"""
    cursor.execute(add_row, (7, 'K1', 'NO.', find_binary))
    
    
  • 相关阅读:
    cocos2dx注意点
    [转]优化Cocos2d程序的内存消耗
    [转]Cocosdx中介者模式
    [转]Cocos2dx委托模式
    [转]cocos2dx场景切换时内存过高导致crash解决方法
    SQL语句字符串处理大全(转)
    C#不区分大小写的字符串替换(Replace)函数(转)
    lucene.net 分词 搜索
    起点上的页面传值js,有空研究下
    正则表达式取网页链接以及标题,包含单、双引号,以及没有引号的情况
  • 原文地址:https://www.cnblogs.com/plusUltra/p/11430721.html
Copyright © 2011-2022 走看看