1.可视化工具Navicat

  我们自己开发测试时,可以使用该可视化工具,以图形界面的形式操作数据库

  在生产环境中,为了显示自己的逼格,一般不建议使用它

官网下载:https://www.navicat.com/en/products/navicat-for-mysql

网盘下载:https://pan.baidu.com/s/1bpo5mqj

2.pymysql的使用

2.1模块的下载(终端)

pip install pymysql

2.2链接,执行sql以及关闭游标

  这是我在test库下创建的ttt表格

import pymysql

user = input('username:').strip()
pwd = input('password:').strip() # 链接
conn = pymysql.connect(host='localhost',port=3306,user='root',password='',database='test',charset='utf8') # 创建游标对象
cursor = conn.cursor() # 执行mysql语句
sql='select * from ttt where name="%s" and password="%s"' %(user,pwd)
print(sql) # 执行sql语句,返回sql查询成功的记录数目,输入错误则是0,正确输出1
result = cursor.execute(sql)
print(result) cursor.close()
conn.close()

类似结果

2.3 execute()之sql注入

看看下面两种输入方式(注意输入的是单引号还是双引号,另--后面还有空格,否则输出是0)

  在用户名输入正确的情况下绕过密码(bob"-- 任意字符)

  直接绕过用户名和密码访问(xxx' or 1=1 -- 任意字符)

造成上面结果的原理:

  就根据程序的字符串拼接name='%s',我们输入一个xxx"-- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'

解决办法:

  核心就是不使用字符串拼接方方式去访问就ok,下面是修改的代码

import pymysql

user = input('username:').strip()
pwd = input('password:').strip() # 链接
conn = pymysql.connect(host='localhost',port=3306,user='root',password='',database='test',charset='utf8') # 创建游标对象
cursor = conn.cursor() # 执行mysql语句,这里两个%不需要加上引号,mysql会默认给加上,另外pymysql模块自动帮我们
# 将uer和pwd注入,所以下面括号内的内容必不可少(也可以是列表),它其实间接的和字符串拼接是一个道理
sql = "select * from ttt where name=%s and password=%s"
print(sql) # 这步没啥意义,就是让你看看结果
res = cursor.execute(sql,(user,pwd))
print(res) cursor.close()
conn.close()

结果

2.4 增、删、改:conn.commit()

  这里一定要有execute执行和commit提交这几步

import pymysql

# 链接
conn = pymysql.connect(host='localhost',port=3306,user='root',password='',database='test',charset='utf8') # 创建游标对象
cursor = conn.cursor() # 增一个
sql = "insert into ttt(name,password) values(%s,%s);"
res = cursor.execute(sql,('luffy',666)) # 增多个
sql = "insert into ttt(name,password) values(%s,%s);"
res = cursor.executemany(sql,[('qq',454),('ww',574),('ee',322)]) # 必须放进一个大的列表里 # 改操作
sql = "update ttt set name = %s where id = 4;"
cursor.execute(sql,'zoro') # 删操作
sql = "delete from ttt where id=2;"
cursor.execute(sql) # 删除了这步执行语句也得要有 conn.commit() # 提交语句,必须要有,别忘啊
cursor.close()
conn.close()

2.5查 fetchone,fetchmany,fetchall(属于光标操作)

fetchone():获取下一行数据,第一次为首行;
fetchall():获取所有行数据源
fetchmany(4):获取4行数据

上面的表经过增删改后:

fetchone()与fetchall()

import pymysql

# 链接
conn = pymysql.connect(host='localhost',port=3306,user='root',password='',database='test',charset='utf8') # 创建游标对象
cursor = conn.cursor() # 默认返回元祖形式
# cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 它返回的是一个字典 # 查操作,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询
sql = "select * from ttt;"
rows = cursor.execute(sql) # 查询单个
res1=cursor.fetchone() # 查找出id是1的
res2=cursor.fetchone() # 查找出id是3的
print(res1)
print(res2) # 对rows进行操作,查找所有,注意这里的所有指的是id是3以后的了,光标已经移动了
rows = cursor.fetchall()
print(rows) conn.commit() # 提交语句,必须要有,别忘啊
cursor.close()
conn.close()

注意,当使用fetchone获取数据时,如果光标已经到最后一行,则会返回none,我们可以采用下面方式移动指针

cursor.scroll(1,mode='relative')  # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
第一个值为移动的行数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于首行移动

数据库可视化工具简介以及pymysql的使用的更多相关文章

  1. 数据库——可视化工具Navicat、pymysql模块、sql注入问题

    数据库--可视化工具Navicat.pymysql模块.sql注入问题 Navicat可视化工具 Navicat是数据库的一个可视化工具,可直接在百度搜索下载安装,它可以通过鼠标"点点点&q ...

  2. Ubuntu14.04下Mongodb数据库可视化工具安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 前期博客 Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐) Ubuntu14.04下Mongodb官网安装部署步骤(图 ...

  3. SQLite实现数据库的储存2+SQLite数据库可视化工具SQLite Stadio

    今日所学 SQLite实现数据库的储存 查看数据库的两种方法 Android 中 SQLite 数据库的查看 - woider - 博客园 SQLite Studio安装教程 [SQLite]可视化工 ...

  4. mysql数据库可视化工具—Navicat Premium—安装与激活

    一.Navicat premium简介 Navicat premium是一款数据库管理工具.将此工具连接数据库,你可以从中看到各种数据库的详细信息.包括报错,等等.当然,你也可以通过他,登陆数据库,进 ...

  5. redis数据库可视化工具(RedisDesktopManager)

    RedisDesktopManager下载地址:https://redisdesktop.com/download 使用过程中可能会遇到的问题我在文后有所总结 我下载Windows版的: 我的redi ...

  6. mongoDb数据库可视化工具 --- Robo

    工具下载: https://robomongo.org/download 最终效果: 即我们可以直接看到链接到 27017端口 的数据的所有数据,并且可以对其进行行之有效的增删查改. 注意,在下载软件 ...

  7. oracle数据库可视化工具

    1.TreeSoft基于web网页方式,管理维护oracle数据,功能包括:SQL在线执行,数据在线维护管理,数据导出,数据交换同步等. 支持MySQL,Oracle,DB2,PostgreSQL,S ...

  8. Mac-Navicat Premium For Mac 12 破解 - [数据库可视化工具,亲测完美破解]

    一.下面的公钥和私钥暂时存到文本编辑器中 公钥: -----BEGIN PUBLIC KEY-----MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB8vXG0I ...

  9. MySQL py模块的链接Navicat可视化工具

     数据库可视化工具Navicat 1 基本操作: 1 库 表 字段 记录(增删改查) 2 添加主建,添加自增. 3 添加外键,外键的链接 4 模型建表,模型添加外键.(逆向数据库到模型,运行SQL文件 ...

随机推荐

  1. Unity string 转换为 Quaternion

    public Quaternion QuaternionParse(string name) { name = name.Replace("(", "").Re ...

  2. 通过进入单用户模式解决linux中的rc.local修改后无法启动的问题

    问题:本想将teamviewer这个软件随linux自启动,所以将其启动命令放在rc.local中,但是重启后发现linux启动不起来了,系统前面都是正常启动的,就是无法进入帐户登陆界面,无法输入ro ...

  3. js实现的省市县三级联动的最新源码

    <!DOCTYPE html> <html> <head> <title>省市区三级联动</title> <!-- 直接使用QQ的省市 ...

  4. c#-day01学习笔记

    C#语言基础 .net之父--------安德斯/海尔斯伯格 .net是一个平台,一个集合,一个环境 .net出现的背景 .net的核心功能:能够在任何的时间,任何的地点,使用任何的设备,访问网络 . ...

  5. vue的组件传输

    vue的组件传输有四种,我个人觉得pubsub(订阅/发布)是最好用的,因为他不用去考虑关系,所以我们下面就只讲解pubsub吧 1) 优点: 此方式可实现任意关系组件间通信(数据)   首先我们需要 ...

  6. spring注入bean的五种方式

    1.属性注入 2.构造方法注入 3.静态工厂注入 package com.voole.factorybeans; import com.voole.beans.TestBean; public cla ...

  7. 洛谷P3128 [USACO15DEC]最大流Max Flow(树上差分)

    题意 题目链接 Sol 树上差分模板题 发现自己傻傻的分不清边差分和点差分 边差分就是对边进行操作,我们在\(u, v\)除加上\(val\),同时在\(lca\)处减去\(2 * val\) 点差分 ...

  8. 无法找到msvcp90.dll的一个碰巧解决办法

     作者:朱金灿 来源:http://blog.csdn.net/clever101 上周同事使用VS2008编译一个C++的控制台工程.工程在release模式下可以编译成功,但是运行总是出现无法 ...

  9. iDempiere 使用指南 生产插件(Manufacturing)安装过程

    Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...

  10. C++ Knowledge series 2

    Programming language evolves always along with Compiler's evolvement The semantics of constructors O ...