耿直boy6

视图函数中进行sql查询,防止sql注入

 

视图函数中进行sql查询

 

import pymysql
# 创建连接  use_unicode=true指定字符的编码、解码格式,进行自动编码解码,mysql数据库的编码格式为gbk,而项目数据库为utf-8
# 使用与django和falsk框架
db=pymysql.connect(host='127.0.0.1',user='root',password='',port=3306,database='t1',charset='utf8',use_unicode=True)

def func():
    sql='select * from class'
    try:
        # 获得course对象
        corsor=db.cursor()
        # 执行sql语句
        corsor.execute(sql)
        # 获得查询结果
        results=corsor.fetchall()
        l=list(results)
        print(l)
        return len(l)

    except Exception as e:
        return str(e)

if __name__ == '__main__':
    print(func())

  

防止sql注入

from pymysql import *
def main():
    
    find_name = input("请输入物品名称:")
    
    # 创建Connection连接
    conn = connect(host='localhost',port=3306,user='root',password='',database='t1',charset='utf8')
    # 获得Cursor对象
    cs1 = conn.cursor() 
     
    # 不使用防护措施 输入  " or 1=1 or " 那么就返回数据库数据,造成数据库泄露
    # count=cs1.execute("select * from course where cname='%s'" % find_name)
    
    # 构造查询参数 -- 方式sql注入   execute模块会自动为要查询的匹配引号和双引号
    params=[find_name]
    count=cs1.execute('select * from course where cname=%s',params)
    # 注意:
    # 如果要是有多个参数,需要进行参数化
    # 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可

    print(count)
    result=cs1.fetchall()
    print(result)

    # 关闭corsor对象
    cs1.close()
    # 关闭connection对象
    conn.close()

if __name__ == '__main__':
    main()

  输入要查的字段会显示响应数据内容。

posted on 2019-06-15 16:53  猫巴  阅读(441)  评论(0编辑  收藏  举报

导航

原文:https://www.cnblogs.com/djfboai/ 版权声明:本文为博主原创文章,转载请附上博文链接!