• Navicat可视化软件与python第三方pymysql模块


    Navicat可视化软件

    1.Navicat作用

            Navicat图形界面可以直观、简化管理数据库数据,用来充当MySQL、MariaDB、SQL Server、Oracle、PostgreSQL和SQLite的客户端,最主要用于MySQL  

    2.下载与安装

            官方下载地址:https://navicat.com.cn/

    3.主要功能

    链接服务器:

     双击查看表格:

     创建表格:

    ps:所有关于SQL语句的操作都可以通过Navicat可视化简单的操作。

    第三方模块pymysql

    1.pymysql模块的作用

            在python3.x中,可以使用pymysql来连接MySQL数据库,pymysql还包含了 pure-Python MySQL 客户端库,并实现数据库的各种操作;Python2中则使用mysqldb

    2.安装pymysql模块

            因为是第三方模块所以在使用前要先将pymysql模块进行安装,下面是通过pip的方式进行安装当然安装第三方模块的方法也有很多详情参考:第三方模块安装

    pip install PyMySQL

    3.链接服务端

            在链接数据库前得先创建好数据库、表及数据

    1. import pymysql
    2. conn = pymysql.connect(
    3. host = 'localhost', # 服务器地址
    4. port = 3306 , # 端口号
    5. user = 'root', # 访问用户
    6. password = '123', # 用户密码
    7. database = 'db', # 数据库
    8. charset = 'utf8mb4' # 数据类型
    9. autocommit = True # 执行增、改、删操作时自动执行conn.commit
    10. );
    11. # 产生一个游标对象
    12. cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)
    13. # 编写SQL语句
    14. sql1 = ‘select * from userinfo'
    15. # 执行SQL语句
    16. cursor.execute(sql1)
    17. # 获取执行完的所有数据
    18. data = cursor.fetchall()
    19. # 打印获取数据
    20. print(data)
    21. #关闭游标和数据库的连接
    22. cursor.close()
    23. conn.close()

    4.pymysql对表的增、改、删操作

            pymysql对表操作时只需把SQL语句进行变换编写就可以

    1. import pymysql
    2. conn = pymysql.connect(
    3. host='localhost',
    4. port=3306,
    5. user='root',
    6. password='12345678',
    7. database='db',
    8. charset='utf8mb4',
    9. autocommit=True
    10. )
    11. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    12. # 查看user表内的所以数据
    13. sql1 = 'select * from user'
    14. # 增加数据
    15. sql2 = 'insert into user(name,gender,age) values("Annle","male",18)'
    16. # 修改表数据
    17. sql3 = 'update user set age = 88 where id=2'
    18. # 删除表
    19. sql4 = 'delete from user'
    20. # 发送给服务端
    21. cursor.execute(sql1)
    22. # 获取执行的结果
    23. data = cursor.fetchall()
    24. print(data)
    25. cursor.close()
    26. conn.close()

    5.获取查询数据

            查询数据后可以根据需要的数据选择不同的语句

    1. import pymysql
    2. conn = pymysql.connect(
    3. host='localhost',
    4. port=3306,
    5. user='root',
    6. password='12345678',
    7. database='db',
    8. charset='utf8mb4',
    9. autocommit=True
    10. )
    11. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    12. # 查看user表内的所以数据
    13. sql1 = 'select * from user'
    14. cursor.execute(sql1)
    15. data = cursor.fetchall() # 获取结果集所以数据
    16. print(data)
    17. data1 = cursor.fetchone() # 获取结果集中一条数据
    18. print(data1)
    19. data2 = cursor.fetchmany(2) # 获取结果集中指定条的数据
    20. print(data2)
    21. data3 = cursor.scroll(2,mode='relative') # 获取基于当前位置往后移动
    22. print(data3)
    23. data4 = cursor.scroll(2,mode='absolute') # 获取数据集开头的位置往后移
    24. print(data4)
    25. cursor.close()
    26. conn.close()

    6.SQL注入问题

            本质就是利用一些特殊含义的符号组成了含义特殊意思的语句从而改变了代码原本的执行逻辑

    发现问题:

    1. import pymysql
    2. conn = pymysql.connect(
    3. host='localhost',
    4. port=3306,
    5. user='root',
    6. password='12345678',
    7. database='db',
    8. charset='utf8mb4',
    9. autocommit=True
    10. )
    11. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    12. username = input('username>>>:').strip()
    13. password = input('password>>>:').strip()
    14. # 4.编写SQL语句
    15. sql = "select * from user where name='%s' and pwd='%s'"%(username,password)
    16. cursor.execute(sql)
    17. res = cursor.fetchall()
    18. if res:
    19. print('登录成功')
    20. print(res)
    21. else:
    22. print('用户名或密码')

     当编写基于数据库登陆用户时发现当输入 xxx or 1=1 或 用户名 -- 乱码 时依然返回登陆成功,此时根据还原sql语句发现:

    1. select * from user where name=‘aa’ -- ndjkcndj and pwd=‘123
    2. '''--在SQL语句中是注释 所以将--后面的语句全部注释了'''
    3. select * from user where name=‘aa’ and pwd=dsdsv or 1=1
    4. '''or 在关系运算中表示一个成立即可而1=1恒成立'''

    解决注入问题:

            execute模块也可以识别%s并过滤特殊符号会自动将数据传入

    1. import pymysql
    2. conn = pymysql.connect(
    3. host='localhost',
    4. port=3306,
    5. user='root',
    6. password='12345678',
    7. database='db',
    8. charset='utf8mb4',
    9. autocommit=True
    10. )
    11. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    12. username = input('username>>>:').strip()
    13. password = input('password>>>:').strip()
    14. # 4.编写SQL语句
    15. sql = "select * from user where name=%s and pwd=%s"
    16. cursor.execute(sql,(username,password))
    17. res = cursor.fetchall()
    18. if res:
    19. print('登录成功')
    20. print(res)
    21. else:
    22. print('用户名或密码')

  • 相关阅读:
    计算机毕业设计选题推荐-体育赛事微信小程序/安卓APP-项目实战
    vue指令(代码部分二)
    在 IDEA 中如何创建 SpringBoot 项目
    【精讲】vue框架 具名插槽、作用域插槽、默认插槽(内含所有源码)
    矩阵的行列式的计算及其源码
    函数的参数
    sql 11
    坑爹的jack-server
    如何自动注册推特推广号,推特注册的具体步骤
    七月集训(1)数组
  • 原文地址:https://blog.csdn.net/weixin_52596593/article/details/126407757