数据库操作(三)

数据库操作(三)

1.Navicat工具

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

    

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

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

    

    

    

    

    

    

    

    

    

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

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

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

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

    

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

    

    

    

    

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

然后点击保存:

    

这个表就生成了:

    

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

    

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

然后我们看看建立外键

    

    

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

    

    

    

    

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

    

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

    

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

设计表:

    

    

    

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

    

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

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

给dep表插入几条数据

    

    

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

    

    

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

    

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

    

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

    

    

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

    

 然后导出保存到一个地方

    

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

   

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

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

    

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

    

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

    

    

然后运行一下:

     

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

 首先我们新建一个库:

      

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

      

      

      

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

      

 然后通过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('用户名和密码错误!')

原文地址:https://www.cnblogs.com/tutougold/p/11455764.html

时间: 2024-10-08 22:05:16

数据库操作(三)的相关文章

小白5分钟上手c#数据库操作(三) 使用VisualStudio 1分钟快速完成一张表增删改查

VisualStudio 为了节省开发人员时间,提供了很多对数据库的快捷操作: 下面介绍使用GUI,快速搭建数据库表的增删改查: SQlite: 前期准备: 1. VisualStudio 安装两个插件: 2. 数据源准备: SQlite 制作的数据库一个 步骤: 1. 新建 winform 工程 2.拖拽一个DataGridView 3.添加数据源 4.选择数据库 5. 选择DataSet 6. 首次添加数据源,选择New 7. 进入添加Connection 界面并选择SQlite 8. 选择

如何将Android数据库操作通用化(三)

概述 悠悠绿水傍林侵日落观山四望回 幽林古寺孤明月冷井寒泉碧映台 鸥飞满浦渔舟泛鹤伴闲亭仙客来 游径踏花烟上走流溪远棹一篷开 概述 一个不小心都写了三篇了,也不知道大家还看得懂不?如果看不懂最好给我留个言,我好下一次改正. 接着上次的说,准备工作都已经做好了,现在咱们就要开始着手解决阻挡Android数据库操作通用化的五个问题了. 我们先回顾一下问题: 问题1:表名的获取 问题2:如何将实体中的数据,按照对应关系导入到数据库中 问题3:明确实体中主键是谁?获取到主键中封装的值 问题4:如何将数据

[PHP]PHP编程操作Mysql数据库的三种方式

当我开始去接触PHP的时候,真切的感受到其所具有的魅力,本着学习的态度和打破固有的语言和模式的想法,开始了PHP之旅,总的来说,走的还是比较顺利,在其中能够看到C,Java,Perl影子,学习曲线不大,但是做好产品仍然有着一条漫漫长路. 多余的话不说了,慢慢感受和领悟,本文主要讲述PHP操作数据库的三种扩展. 如下图是PHP访问数据库的三种扩展方式: 下面举出三种方式访问数据库并查询数据的实例代码: 1.mysql扩展 <?php //1:获取数据库连接 $connection = @ mysq

ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )

//TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: public function testdb(){ $obj=M("User"); dump($obj); } 此时浏览器输出: object(Model)#5 (20) { ["_extModel:private"] => NULL ["db:protecte

Java_Web三大框架之Hibernate操作数据库(三)

使用Hibernate操作数据库需要七个步骤: (1)读取并解析配置文件 Configuration conf = newConfiguration().configure(); (2)读取并解析映射信息,创建SessionFactory SessionFactory sf = conf.buildSessionFactory(); (3)打开Session Session session = sf.openSession(); (4)开始一个事务(增删改操作必须,查询操作可选) Transac

C# .NET更智能的数据库操作的封装

前述: 对数据库操作的封装,相信网络上已经有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持数据库操作.这篇文章是分享自己所思考的,对数据库操作的简单封装.我对于这篇文章,认为被浏览者所关注重点的是怎么分析设计数据库操作封装,代码是其次.而且,这是我第一篇文章,为了想好怎么实现花了些天,代码是博客发表时现写的.所以我想,使用可能还有bug,而且没有try catch异常的设计. 这个框架我理应做到对数据库无关,无论是哪个数据库都能够使用.不过,重点在于分析,而不是代码.所以,为了更好的

数据库——基础(数据库操作,表格操作)——增加高级查询

笔记 LAMP:Linx(操作系统) A(阿帕奇)——网页的应用程序 M(Mysql):体积小,应用简单 P(PHP) 第一步:搭建网页环境——A\M\P WAMP:用WAMP搭建环境 DW:更好的显示 数据库的基本操作: 数据库——表结构——字段(列) 每一行数据成为一条数据(记录) 特点:关系型数据库,有严格的规范 1.必须有主键:能够唯一标识一条数据的字段 2 T-SQL:通用的数据库操作语句 自增长列code(主键列) ;连接键表 最后一个字段不加 ,#注释 创建表:create tab

SQLiteDatabase数据库操作详解

今天花了点时间总结了一下数据的相关知识android中系统自带的数据库SQLiteDatabase数据库,这种数据库操作起来比ormLite数据库(第三方的)麻烦点,但是我对这种数据库操作比较熟悉所以我就采用了这种数据库,如有错误欢迎大家批评指正,谢谢 1.SQLiteDatabase SQLiteDatabase本身是一个数据库的操作类,但是如果想进行数据库的操作,还需要android.database.sqlite.SQLiteOpenHelper类的帮助,在执行SQL语句时execSQL(

常用的Mysql数据库操作语句大全

零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PASSWORD('fdddfd'); 3.权限管理 >SHOW GRANTS FOR name;    //查看name用户权限 >GRANT SELECT ON db_name.* TO name; //给name用户db_name数据库的所有权限 >REVOKE SELECT ON db_n