博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库可视化工具简介以及pymysql的使用
阅读量:5012 次
发布时间:2019-06-12

本文共 2959 字,大约阅读时间需要 9 分钟。

1.可视化工具Navicat

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

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

官网下载:

网盘下载:

2.pymysql的使用

2.1模块的下载(终端)

pip install pymysql

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

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

import pymysqluser = 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,正确输出1result = 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 pymysqluser = 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指定了是相对当前位置移动,还是相对于首行移动

 

转载于:https://www.cnblogs.com/LearningOnline/p/9185380.html

你可能感兴趣的文章
广告地址屏蔽
查看>>
收缩SqlServer数据库日记方法
查看>>
每日英语:15 places to find inspiration
查看>>
学习方法--提问
查看>>
【转】每天一个linux命令(3):pwd命令
查看>>
merge-two-sorted-lists
查看>>
MySQL(3)
查看>>
poj1061——扩展gcd水题
查看>>
UVa400.Unix ls
查看>>
POJ 2299 Ultra-QuickSort 归并排序、二叉排序树,求逆序数
查看>>
Educational Codeforces Round 60 (Rated for Div. 2) C. Magic Ship
查看>>
Windows 2008 R2系统开机时如何不让Windows进行磁盘检测?
查看>>
WP7应用开发笔记(18) 本地化与多语言
查看>>
解决 .so文件64与32不兼容问题
查看>>
归并排序法
查看>>
【剑指offer】面试题26:复杂链表的复制
查看>>
spark开发生成EXE
查看>>
Vue 全家桶介绍
查看>>
WPF Bitmap转Imagesource
查看>>
Java compiler level does not match the version of the installed Java project facet.解决方法
查看>>