一:Navicate的安装

1.什么是navicate?

Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。
它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,
让你可以以安全并且简单的方式创建、组织、访问并共用信息。

简单的来说,我们刚开始是在命令行里面进行MySQL操作,但是我们目前接触的要求不多,如果是很长很复杂的命令怎么办,所以呢,就如python中的pycharm一样,当notepad++不能够满足你的要求的时候,就与一款新的软件来替代它,这里呢,简单说一下navicate的安装

2.安装

Navicat,用于连接数据库,
- 查找
- 修改
- 根性
....
# 点点点: -> SQL语句

下载软件:在官网上下载Navicat  ,下载之后按照提示一直下一步就行,当然有英文版和中文版的,我这里使用的是破解版的中文版,

简化简单操作
创建表
修改表结构
插入
查询
更新
删除

我使用之后感觉功能在我们用命令行的时候差不多,但是这里简化了很多,很方便,而且也更多的功能,具体的效果大家可以实际操作以后就会感觉到,

二:python操作MySQL

2.1 下载安装

首先呢,要想在pycharm中使用MySQL就要安装这个软件

pip3 install pymysql  这是一条执行命令,就是通过pip3来安装pymysql这个模块,前提注意的是要在环境里面添加pip3这个路径,一定要注意,或者直接是在pycharm中settings这一项里面直接添加

2.2    操作使用

2.21  基本通过pymysql来执行一个MySQL语句  来看一下代码

import pymysql
#创建连接
conn = pymysql.connect(host = "127.0.0.1",port = 3306,user = "root",passwd = "",db = "lianxi",charset = "utf8")
#创建游标
cursor = conn.cursor()
cursor.execute("insert into class(caption) values('全栈二期')")
#其实这里是受影响的行数,因为加入了一条所以呢这里的r结果就是 1
#r = cursor.execute("select * from student where sid = 2")
#print(r)
#print(cursor.fetchone())
conn.commit() #提交
#关闭游标
cursor.close()
#关闭连接
conn.close()

2.3  pymysql   之增删改查

先来看一下在pymysql中连接的问题,直接来看代码其中有详细的注释

import pymysql
#创建连接
conn = pymysql.connect(host = "127.0.0.1",port = 3306,user = "root",passwd = "",db = "lianxi",charset = "utf8")
#创建游标
cursor = conn.cursor()
#受影响的行数
#r = cursor.execute("select * from student where sid = 2")
#print(r)
#print(cursor.fetchone())
#字符串拼接sql,这里测试可以执行,禁止操作,但是这里不可以还有另外一种看下面
# inp = input("请输入班级:")
# sql = ""insert into class(caption) values('%s')
# sql = sql %(inp,)
# r = cursor.execute(sql)
# print(r) #参数传递,必须使用参数的形式,因为上面的有可能会造成SQL注入,
inp = input("请输入班级:")
#注意这里最后面的%s的"",在这里是不需要加的,因为这里内部已经帮你拼接了
r = cursor.execute("insert into class(caption) values('%s')",inp)
r = cursor.execute("insert into class(caption) values(%s)",inp) conn.commit() #提交
#关闭游标
cursor.close()
#关闭连接
conn.close()

连接问题

#插入多条的时候直接加上一个元组就行
r = cursor.execute("insert into student(gender,class_id,sname) values(%s,%s,%s)",("女",1,"鸭蛋"))

连接多个

增加数据
r = cursor.execute("update student set sname = %s where sid = %s",("马打狗",1))

更新数据

r = cursor.execute("delete from score where sid = %s",(49,))
conn.commit() #提交

删除数据

切记,这些增删改数据 都是在连接和连接已经建立好的情况下才执行的,当然还有 在每一次命令执行之后必须有commit提交才能有结果

但是呢,还有一点在下面的查 里面执行命令操作的时候是不需要commit的可看下面代码

把里面的数据全部拿出来  以元组的形式
# result = cursor.fetchall()
# print(result) #只拿第一条数据
# result = cursor.fetchone()
# print(result)
#这里如果再写这样一条数据那么拿到的就是第二条数据,再写就是第三条数据依次类推
#其实也就是相当于一个指针,拿到一个继续往下一移一个
# result = cursor.fetchone()
# print(result) #可指定拿几条数据
result = cursor.fetchmany(3)
print(result)

查数据

在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

cursor.scroll(1,mode='relative')  # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动 result = cursor.fetchone()
print(result)
#绝对的,就是回到前面所定义的位子
#cursor.scroll(0,mode='absolute')
#这里面可以写2表示相对的向下移动2位,如果写-2表示向上移动2位
cursor.scroll(2,mode='relative')
#这里如果再写这样一条数据那么拿到的就是第二条数据,再写就是第三条数据依次类推
#其实也就是相当于一个指针,拿到一个继续往下一移一个
result = cursor.fetchone()
print(result)

2.4 获取新创建数据自增ID

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='t1')
cursor = conn.cursor()
cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
conn.commit()
cursor.close()
conn.close() # 获取最新自增ID
new_id = cursor.lastrowid

2.5   fetch 数据类型

  关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='lianxi')
# 游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
r = cursor.execute("call p1()") result = cursor.fetchone()
conn.commit()
cursor.close()
conn.close()
r = cursor.execute("select * from tb6666")
print(cursor.fetchall())
结果为:
((1, 'alex', 9, 'asasa', 'qqqqq', 'df'), (2, 'uu', 8, 'wr', 'wwww', 'df'),
是以元组的形式存在的
但是如果加上这样一句话
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
r = cursor.execute("select * from tb6666")
print(cursor.fetchall())
结果为:
[{'name': 'alex', 'pwd': 'qqqqq', 'nid': 1, 'num': 9, 'user': 'df', 'email': 'asasa'},

拿到的就是以字典的形式存的

2.6 sql注入问题

在我们使用用户密码登录的时候,使用字符串连接可能会照成SQL注入问题,因此,不能使用子字符串连接,下面就来简单了解一下原因,先来看一个简单得多例子,

import pymysql
#创建连接
conn = pymysql.connect(host = "127.0.0.1",port = 3306,user = "root",passwd = "",db = "sss",charset = "utf8")
#创建游标
cursor = conn.cursor()
cursor.execute("select name,pwd from userino where name = %s and pwd = %s ",("alex",123))
result = cursor.fetchone()
print(result)
conn.commit() #提交
#关闭游标
cursor.close()
#关闭连接
conn.close

我们通过执行代码就可以拿到我们想要的结果,此时注意一点在代码中的%s这一个地方,这里没有"",是因为pycharm内部已经帮我们加上了引号“”,但是字符串连接为什么就有可能出问题呢来看下面

sql = 'select name,pwd from userino where name = "%s" and pwd = "%s "'
sql = sql %("alex",123)
cursor.execute(sql)
result = cursor.fetchone()
print(result)
执行这个代码也能得到结果,但是如果我改一下呢,看看有什么效果,来看下面的代码
sql = 'select name,pwd from userino where name = "%s" and pwd = "%s "'
sql = sql %('alex" or 1=1 -- ',1235)
cursor.execute(sql)
result = cursor.fetchone()
print(result) 这里执行完以后也能拿到你想要的结果,但是是为什么呢?里面的 or 1=1 其实也可以不要,这就是我们得SQL注入
因为在SQL语句中我们得注释是-- ,所以呢在上面的代码中,我们得前一部分如果带入到name那一项中-- 就会把后面的那一部分注释掉,
所以只要拿到一个正确的名字就可以拿到密码,这就是最基本的SQL注入,
还有一点上面的or 1=1 是什么意思?就是说如果你写的名字不是Alex写成其他的也行但是没有影响因为你后面有or 1= 1
相当于你无论写什么这个条件都是成立的,都会拿到结果,
所以说呢,在这里不能这样用。

Python全栈开发之MySQL(二)------navicate和python操作MySQL的更多相关文章

  1. 战争热诚的python全栈开发之路

    从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...

  2. python全栈开发之OS模块的总结

    OS模块 1. os.name()      获取当前的系统 2.os.getcwd      #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...

  3. Python全栈开发之MySQL(三)视图,存储过程触发器,函数,事务,索引

    一:视图 1:什么是视图? 视图是指存储在数据库中的查询的SQL语句,具有简单.安全.逻辑数据独立性的作用及视点集中简化操作定制数据安全性的优点.视图包含一系列带有名称的列和行数据.但是,视图并不在数 ...

  4. Python全栈开发之 Mysql (一)

    一: 1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库别说我们在写程序的时候创建的database就是一个数据库 2.什么是 MySQL.Oracle.SQLi ...

  5. Python全栈开发之14、Javascript

    一.简介 前面我们学习了html和css,但是我们写的网页不能动起来,如果我们需要网页出现各种效果,那么我们就要学习一门新的语言了,那就是JavaScript,JavaScript是世界上最流行的脚本 ...

  6. Python全栈开发之1、输入输出与流程控制

    Python简介 python是吉多·范罗苏姆发明的一种面向对象的脚本语言,可能有些人不知道面向对象和脚本具体是什么意思,但是对于一个初学者来说,现在并不需要明白.大家都知道,当下全栈工程师的概念很火 ...

  7. python全栈开发之路

    一.Python基础 python简介 python数据类型(数字\字符串\列表) python数据类型(元组\字典) python数据类型(集合) python占位符%s,%d,%r,%f prin ...

  8. Python全栈开发之7、模块和几种常见模块以及format知识补充

    一.模块的分类 Python流行的一个原因就是因为它的第三方模块数量巨大,我们编写代码不必从零开始重新造轮子,许多要用的功能都已经写好封装成库了,我们只要直接调用即可,模块分为内建模块.自定义的模块. ...

  9. Python全栈开发之9、面向对象、元类以及单例

    前面一系列博文讲解的都是面向过程的编程,如今是时候来一波面向对象的讲解了 一.简介 面向对象编程是一种编程方式,使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” ...

随机推荐

  1. STM32 驱动12864液晶显示汉字、图片、画点、横线、竖线、斜线

    我做本实验的软件平台为MDK软件,选用STM32VET6,12864液晶屏5v供电采用并行接法.之前本来想网上找一个现成的程序实验一下,但都没找到合适的,于是就自己编写了一个,最终可在12864液晶屏 ...

  2. Kafka 0.8: 多日志文件夹机制

    kafka 0.7.2 中对log.dir的定义如下: log.dir none Specifies the root directory in which all log data is kept. ...

  3. dateTimePicker日期时间插件-----限定节假日调休的可选择性

    需求:在项目中需要一款这样的日期插件,可以选择年月日,时分秒,对法定节假日不能选择,因法定节假日进行的调休可以选择: 现在使用的比较多的日期插件比如:Wdatepicker,jqueryUI的date ...

  4. [RAC] oracle rac 后台进程

    一.RAC后台进程 LMON:LOCK Monitor Processes 也被称为Global enqueue service monitor 监控整个集群状况,维护GCS的内存结构 监控非正常终止 ...

  5. magento 操作数据库

    查:     $read = Mage::getSingleton(“core/resource”)->getConnection(‘core_read’);     $sql = “selec ...

  6. Visual Basic|VB 6.0中文版

    附加下载链接:http://xiazai.zol.com.cn/detail/3/29939.shtml?&437886-tsina-1-838-a507c04d8e448a55dd65bfc ...

  7. Character Studio

  8. C#中params使用

    1.参数被params修饰即为可变参数,params只能修饰一维数组. 2.给可变参数赋值的时候,可以直接传递数组的元素. 3.在调用的时候,会自动将这些元素封装为一个数组,并将数组传递. 4.可变参 ...

  9. 如何在VC++ 中调试MEX文件

    MEX文件对应的是将C/C++文件语言的编写之后 得到的相关文件加载到Matlab中运行的一种方式, 现对于Matlab 中的某些程序运行效率而言, C/C++ 代码某些算法的领域上面执行效率很高,若 ...

  10. HTML解析引擎:Jumony

    Jumony Core首先提供了一个近乎完美的HTML解析引擎,其解析结果无限逼近浏览器的解析结果.不论是无结束标签的元素,可选结束标签的元素,或是标记属性,或是CSS选择器和样式,一切合法的,不合法 ...