美文网首页笔记本📒
python-连接MySQL数据库

python-连接MySQL数据库

作者: 涓涓自然卷 | 来源:发表于2021-02-04 11:41 被阅读0次
    1、安装pymysql模块:

    命令:终端输入-> pip3 install pymysql
    验证:python进入窗口输入 -> import pymysql 不报错即可

    2、pycharm中导入pymysq模块包:

    import pymysql

    3、创建连接对象:

    connect()

    4、获取游标对象:

    连接对象.cursor()

    5、pymysql完成数据的查询操作:

    游标对象.execute()

    6、关闭游标和连接

    游标对象.close()
    连接对象.close()

    7、实例🌰:
    # 导入pymysql包
    import pymysql
    
    # 创建连接对象
    conn = pymysql.connect(host="10.5.1.117", port=3306, user="root", password="combanc", database="talent_directory",
                           charset="utf8")
    # 获取游标对象
    cs = conn.cursor()
    
    # 增加数据:pycharm默认是开启事务的,此时客户端访问students表还是原来的数据,因此需要提交事务
    sql = "insert into students(name) values('Lucy');"
    cs.execute(sql)
    
    # 删除数据
    sql = "delete from students where id = 3;"
    cs.execute(sql)
    
    # 修改数据
    sql = "update students set name='Lilo' where id=1;"
    cs.execute(sql)
    
    # pymysql完成数据的查询条件
    sql = "select * from students;"
    cs.execute(sql)
    
    # for循环来显示数据
    cs.execute(sql)
    content = cs.fetchall()
    
    for i in content:
        print(i)
    
    # 提交操作
    conn.commit()
    
    # 关闭游标和连接
    cs.close()
    conn.close()
    
    
    8、防止SQL注入:SQL语句参数化
    • (1) 不安全方式:注意sql等于双引号里的'%s'带了单引号,双引号后面百分号拼接了变量。
      find_name = input("请输入您要查询的学生姓名:")
      sql = "select * from students where name = '%s'" % find_name
    # 导入pymysql包
    import pymysql
    
    # 创建连接对象
    conn = pymysql.connect(host="10.5.1.117", port=3306, user="root", password="combanc", database="talent_directory",
                           charset="utf8")
    # 获取游标对象
    cs = conn.cursor()
    
    # 不安全的方式
    # 根据id查询学生信息,例如:' or 1 or'
    find_name = input("请输入您要查询的学生姓名:")
    sql = "select * from students where name = '%s'" % find_name
    
    # 显示所有数据
    cs.execute(sql)
    content = cs.fetchall()
    for i in content:
        print(i)
    
    # 关闭游标和连接
    cs.close()
    conn.close()
    
    

    运行以上代码,控制台输入:' or 1 or'字符串时,查询结果会将整个表数据全部查出来,而我们目的只是要按照where语句将姓名与输入条件一致的数据显示出来,因此这样会导致sql会被恶意注意的可能性,不安全。

    执行结果:当控制台输入' or 1 or'时
    不安全模式.png
    image.png
    • (2)安全的方式:注意,sql双引号里的%s没有被单引号引起来,并且双引号后面无任何内容。
      find_name = input("请输入您要查询的学生姓名:")
      sql = "select * from students where name = %s"
    # 导入pymysql包
    import pymysql
    
    # 创建连接对象
    conn = pymysql.connect(host="10.5.1.117", port=3306, user="root", password="combanc", database="talent_directory",
                           charset="utf8")
    # 获取游标对象
    cs = conn.cursor()
    
    # 安全的方式
    find_name = input("请输入您要查询的学生姓名:")
    sql = "select * from students where name = %s"
    
    # 显示所有数据
    cs.execute(sql, [find_name])
    content = cs.fetchall()
    for i in content:
        print(i)
    # 关闭游标和连接
    cs.close()
    conn.close()
    
    
    正确方式显示结果:当控制台同样输入' or 1 or'时
    image.png 数据库表.png

    相关文章

      网友评论

        本文标题:python-连接MySQL数据库

        本文链接:https://www.haomeiwen.com/subject/wacbtltx.html