Navicat使用,python操作数据库

407 阅读2分钟

Navicat可视化软件

  • Navicat可以充当数据库软件的客户端,最主要用于mysql
  • Navicat功能十分好用,可以加快sql的操作效率
  • 使用Navicat要注意先学好mysql

Navicat下载

  • 官网下载,自行百度破解

使用python操作数据库

模板:
    import pymysql
        # 1.链接服务端
    conn = pymysql.connect(
        host='127.0.0.1',         # ip地址
        port=3306,                # mysql端口号
        user='root',      
        password='',
        database='db',            # 库名
        charset='utf8mb4',        
        autocommit=True           
    )
        # 2.产生一个游标对象
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        # 3.sql语句编写
    sql1 = 'select * from class'  # 操作class表
        # 4.发送给服务端
    cursor.execute(sql1)       
        # 5.获取命令的执行效果
    res = cursor.fetchone()       # fetchone()可更换
    print(res)
cursor.fetchone()                 # 获取光标所在位置往后的一条数据
cursor.fetchall()                 # 获取光标所在位置往后的所有数据
cursor.fetchmany()                # 获取光标所在位置往后指定条数的数据

cursor.scroll(0, mode='absolute') # 基于数据集开头的位置往后移动,0处代表移动的位数
cursor.scroll(2, mode='relative') # 基于当前位置往后移动,2处代表移动的位数

获取结果

例:
    import pymysql
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='',
        database='db',
        charset='utf8mb4',
        autocommit=True
    )
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql1 = 'select * from class'
    cursor.execute(sql1)
    res = cursor.fetchone()
    print(res)
    cursor.scroll(1, mode='relative')   
    res1 = cursor.fetchmany(2)
    print(res1)
  • 结果
    image.png

SQL注入

  • 如何通过pymysql实现用户登录功能呢
    • 表数据
      image.png
修改前认为的逻辑P:
    import pymysql
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='',
        database='db1',
        charset='utf8mb4',
        autocommit=True
    )
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    username = input('username>>>:').strip()
    password = input('password>>>:').strip()

    sql = "select name,pwd from login where name='%s' and pwd='%s'"% (username,password)

    cursor.execute(sql)
    res = cursor.fetchall()
    if res:
        print('登录成功')
    else:
        print('用户名密码错误')
  • 我们现在的登录操作会因为用户输入的特殊符号可能会变为sql的语法。
    • 为了避免这样的情况出现,我们需要将格式化获取到的用户数据操作放到 cursor.execute()方法内
修改后的:
    import pymysql
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='',
        database='db1',
        charset='utf8mb4',
        autocommit=True
    )
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    username = input('username>>>:').strip()
    password = input('password>>>:').strip()

    sql = "select name,pwd from login where name='%s' and pwd='%s'"

    cursor.execute(sql,(username,password))
    res = cursor.fetchall()
    if res:
        print('登录成功')
    else:
        print('用户名密码错误')