zoukankan      html  css  js  c++  java
  • 数据库操作(三)

    数据库操作(三)

    1.Navicat工具

    在官网下载navicat工具,然后傻瓜式安装好后双击快捷方式打开进入到主界面:

        img

    作为mysql客户端,我们需要连接mysql服务端

        img在弹出的界面输入mysql服务端的ip地址和端口,还有mysql用户名和密码

    img

        img

        img

        img

        img

        img

        

        img

        

        img

    关于校对规则大家看看这两篇博客就明白了:

          https://www.cnblogs.com/adforce/p/3282404.html

          https://www.jb51.net/article/48775.htm

    上面的步骤点击确定就建好一个数据库了:

        img

    然后我们到上面的数据库里面新建一张表

        img

        img

        

        img

    也就是我们通过点击鼠标生成对应的sql语句去执行

    然后点击保存:

        img

    这个表就生成了:

        img

    不信我们去命令行看一看:这个表已经存在了

        img

    以后我们直接就使用这个工具来操作数据库就可以了,因为命令行操作还是比较繁琐的

    然后我们看看建立外键

        img

        img

    然后自动会生成对应的sql语句

        img

        

        img

        img

    然后点击保存,起一个表名,就有了这个表了

        img

    然后双击上面的表名就可以插入数据了

        img

    比方说我们上面这个dep表的id字段没有设置自增,我想改一下,让它这个id字段变为自增的怎么办

    设计表:

        img

        

        img

    那我们该怎么办呢,直接删除这个表然后重新创建吗?你另外一个关联表肯定不让你这么做,所以你需要先将那个关联表的外键关系先取消,或者先将那个外键关联表删除

        img

    然后把这个关联表的外键删除,然后保存

    我们想给id字段加上自增的那个dep表里面把id字段设置为自增,保存,然后在重新将emp表外键到dep的id字段上

    给dep表插入几条数据

        img

        img

        这个工具还能将你的表之间的关系通过图形的形式来给你展示:

        img

        img

     点击这个ER图,两者的关系图就显示出来了,那么将来你的表很多的时候,你就可以通过这个图来查看自己表和表之间的关系,看效果:

        img

    如果我们点击两个表之间的线,是可以看到两者之间的关系的:

        img

     还可以选择上面的模型来直接创作图表,创建表之间的关系

        img

        img

     但是上面我们建立的这个模型,是不能直接创建到数据库里面的,需要将它以sql的形式导入,然后把导出的sql语句,到数据库里面去执行

        img

     然后导出保存到一个地方

        img

    打开我们导出的文件,看一下里面的内容

       img

     这就是创建的模型翻译成的sql语句,复制一下这些sql语句,但mysql里面去执行一下,就等到我们模型里面的两个表了,很方便

    Navicat工具还能写原生sql语句来进行数据库的操作

        img

    就看到一个输入sql语句的界面了:

        img

    然后写一个sql语句试一下:

        img

        img

    然后运行一下:

         img

     我们还可以将之前数据库中导出来的数据,以sql文件的形式通过navicat导入到数据库中:

     首先我们新建一个库:

          img

      然后选择这个数据库,点击右键,选择运行sql文件;

          img

          img

          img

      注意上面这一步,直接关闭就可以了,不要再次点击开始了

          img

     然后通过ER图,来看看,各个表的关系就看的很清楚了。

    2.pymysql模块

    pymysql是在python中操作mysql,也就是一个在python中运行的套接字客户端.

    #安装
    pip install pymysql
    
    import pymysql
    
    conn = pymysql.connect(
    		host = '127.0.0.1',   #主机ip
    		port = 3306,          #端口号
    		user = 'root',          #用户名
    		password = '123',     #密码
    		database = 'learn',   #需要连接的库
    		charset = 'utf8')    
    cursor = conn.cursor()   #游标相当于命令行的 mysql>
    #cursor = conn.cursor(pymysql.cursors.DictCursor)  
    #默认游标取出的数据结构为元组类型即((),()...),DictCusor获取字典数据类型,对应的数据结构是[{},{}..]
    sql = 'select * from dep;'
    ret = cuosor.execute(sql)    #ret为受影响的行数
    print(ret)
    print(cursor.fetchone())  #取出单条数据记录
    print(cursor.fetchmany(3))  #取出多条,即取出3条数据记录
    print(cursor.fetchall())   #取出全部数据记录
    
    cursor.scroll(2,'absolute') 
    #absolute 绝对移动,相对于数据最开始的位置进行光标的移动
    cursor.scroll(2,'relative')
    #relative 相对移动,按照光标当前位置来进行光标的移动
    
    conn.commit()  #增删改都必须进行提交操作(commit)
    
    cursor.close() #关闭游标
    conn.close()   #关闭连接
    
    
    
    
    ps:
    print(cursor.lastrowid)  #获取插入的最后一条数据的自增ID
    
    
    sql注入:
        
        
    #我们来使用数据来进行一下用户名和密码的认证操作
    import pymysql
    
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='666',
        database='crm',
        charset='utf8'
    )
    
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    uname = input('请输入用户名:')
    pword = input('请输入密码:')
    
    sql = "select * from userinfo where username='%s' and password='%s';"%(uname,pword)
    
    res = cursor.execute(sql) #行数受到影响则不为0,即True
    
    print(res) 
    if res:
        print('登陆成功')
    else:
        print('用户名和密码错误!')
    
    #通过上面的验证方式,比我们使用文件来保存用户名和密码信息的来进行验证操作要方便很多。
    
    
    但是
    1.知道用户名不知道密码的情况下输入(asfdf为随意输入的字符)
    uname:asfdf' -- 
    pword:随意输入   
    发现也可以登陆成功,是利用了mysql中 -- 注释的方法修改了mysql指令
    2.不知道用户名也不知道密码的情况下输入
    uname:asfdf' or 1 =1 -- 
    pword:随意输入
    发现也可以登陆成功,是利用了注释加or运算修改了mysql指令
    
    这就是mysql注入的问题,解决办法:
        cursor.execute(sql,[参数1,参数2...])
        
    即:
        
    import pymysql
    
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='666',
        database='crm',
        charset='utf8'
    )
    
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    uname = input('请输入用户名:')
    pword = input('请输入密码:')
    
    sql = "select * from userinfo where username='%s' and password='%s';"
    
    res = cursor.execute(sql,[uname,pword]) #行数受到影响则不为0,即True
    
    print(res) 
    if res:
        print('登陆成功')
    else:
        print('用户名和密码错误!')
    
  • 相关阅读:
    第三次上机
    第5次作业
    第二次上机练习
    第三次作业
    第一次作业
    第一次作业
    第二次上机练习
    第二次作业
    第一次作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/tutougold/p/11455764.html
Copyright © 2011-2022 走看看