zoukankan      html  css  js  c++  java
  • MySQl 数据库 之 python模块 pymysql 简单介绍

    一. 下载:

    终端输入指令: pip3 install pymysql
    
    如果失败就检查 pip 指令的环境变量是否配置;
    若不会,则自行百度;

    等待下载完成后, 在终端直接进入 python 环境, 导入该模块, 若无报错,则证明下载成功.(如下图所示)

    二. 开始使用:

    1, 在py文件中导入该模块:

    import pymysql

    2, 连接数据库服务器:

    复制代码
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8')
    
    # 参数解读:
    # host: 服务器地址;
    # port: 服务器端口号, 这里注意要是 int;
    # user: 登录用户;
    # password: 用户密码;
    # db: 要连接的库的名字;
    # charset: 编码格式;
    复制代码

    3, 创建游标:

    cursor = conn.cursor()

    4, 执行sql语句:

    sql = "select * from userinfo where username='%s' and pwd='%s'" %(user, pwd) # %s 一点要引起来.
    result=cursor.execute(sql)
    print(result)  # 这里打印的是数据的个数.
    
    # 注意: : : : 这里会产生sql 注入的问题, 后面会写, 要着重注意这一点

    5, 关闭游标, 断开连接,  这里注意 一定要关闭,断开, 不然会产生内容浪费, 无法释放:

    cursor.close()
    conn.close()

    实例: 使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中)

    import pymysql
    user = input('请输入用户名:')
    
    pwd = input('请输入密码:')
    
    
    
    # 1.连接
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8')
    
    
    # 2.创建游标
    cursor = conn.cursor()
    
    #注意%s需要加引号
    sql = "select * from userinfo where username='%s' and pwd='%s'" %(user, pwd)
    print(sql)
    
    # 3.执行sql语句
    cursor.execute(sql)
    
    result=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
    print(result)
    
    
    # 关闭连接,游标和连接都要关闭
    cursor.close()
    conn.close()
    
    if result:
        print('登陆成功')
    else:
        print('登录失败')
    实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中)

    2.1 execute() sql注入的问题:

    复制代码
    #最后那一个空格,在一条sql语句中如果遇到select * from userinfo where username='mjj' -- asadasdas' and pwd='' 则--之后的条件被注释掉了(注意--后面还有一个空格)
    
    #1、sql注入之:用户存在,绕过密码
    mjj' -- 任意字符
    
    #2、sql注入之:用户不存在,绕过用户与密码
    xxx' or 1=1 -- 任意字符
    复制代码

    2.2 解决sql注入的问题的方法:

    复制代码
    # 原来是我们对sql进行字符串拼接
    # sql="select * from userinfo where name='%s' and password='%s'" %(username,pwd)
    # print(sql)
    # result=cursor.execute(sql)
    
    #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
    sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上, 且还会自动去空格.
    result=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
    复制代码

    三. 对目标表进行增, 删, 改操作:  ( 注意无论是那个操作一定要进行conn.commit(), 不然数据会丢失);

    commit()方法:在数据库里增、删、改的时候,必须要进行提交,否则插入的数据不生效。

    复制代码
    import pymysql
    
    username = input('请输入用户名:')
    pwd = input('请输入密码:')
    
    conn = pymysql.connect(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8')
    cursor = conn.cursor()
    
    
    # 增:
    
    # 插入一条数据:
    # sql = "insert into userinfo(username,pwd) values (%s,%s)"
    # effect_row = cursor.execute(sql,(username,pwd))
    
    # 同时插入多条数据:
    # cursor.executemany(sql,[('李四','110'),('王五','119')]) 
    
    
    
    # 改:
    
    # sql = "update userinfo set username = %s  where id = 2"
    # effect_row = cursor.execute(sql,username)
    
    
    # 删:
    
    # sql = "delete from userinfo  where id = 2"
    # effect_row = cursor.execute(sql)
    
    #一定记得commit
    conn.commit()
    
    # 4.关闭游标
    cursor.close()
    
    # 5.关闭连接
    conn.close()
    复制代码

    四. 查:fetchone()、fetchmany()、fetchall()

    fetchone():  获取下一行数据,第一次为首行;

    fetchall():   获取所有行数据源;

    fetchmany(4):  获取4行数据;  ( 对于分页查询很有帮助)

    默认情况下,我们获取到的返回值是元组,只能看到每行的数据,却不知道每一列代表的是什么,这个时候可以使用以下方式来返回字典,每一行的数据都会生成一个字典:

    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  #在实例化的时候,将属性cursor设置为pymysql.cursors.DictCursor
  • 相关阅读:
    P4855 MloVtry的idea
    CF343D Water Tree
    CF165D Beard Graph
    P3833 [SHOI2012]魔法树
    P2410 [SDOI2009]最优图像 ZKW最大费用最大流
    P2157 [SDOI2009]学校食堂
    P2407 [SDOI2009]地图复原
    P4008 [NOI2003]文本编辑器
    awk里面执行shell命令
    git 系统中 post-receive 钩子不能正常执行 git pull 解决方法
  • 原文地址:https://www.cnblogs.com/123zzy/p/9772637.html
Copyright © 2011-2022 走看看