视图函数中进行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()

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

相关文章
相关标签/搜索