2017-9-14

2017-9-14:笔记

mysql的IDE工具介绍

生产环境还是推荐mysql命令行,但是为了方便我们个人的测试,可以使用IDE工具。

下载连接

掌握:

#1. 测试+链接数据库

连接名:随意起名字就行,如果连接的是本地就输入本地连接就可以

主机名或IP地址:填写localhost就是本地连接,也可以输入ip地址连接其他数据库

端口:3306默认本地

用户名:root默认的

密码:我个人的数据库没密码,测试起来方便

#2. 新建库

#3. 新建表,新增字段+类型+约束

创建student表

#4. 设计表:外键

我这个表的外键连接的是teacher表的tid

#5. 新建查询

#6. 备份库/表

备份出的文件可以重新导入

#注意:

批量加注释:ctrl+/键

批量去注释:ctrl+shift+/键

#提示本人的安装包跟上面下载的不一样,但是出入不大,操作什么的都一样

(上面下载的mysqlIDE运行之后点击注册,文件中有一个key文件,直接输入激活码就行)。

数据备份与恢复

pymysql

1.pymysql是python连接数据库的。

  • 首先安装pymysql
pip3 install python
  • 连接数据库
import pymysql
#链接
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
#host=‘连接地址‘,user=‘用户名‘,password=‘密码‘,database=‘数据库名称,charset =‘utf8‘

#游标
cursor=conn.cursor()

#执行sql语句
sql=‘select * from student‘ #注意%s需要加引号
print(sql)
res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(res)

cursor.close()
conn.close()

#运行结果
    select * from student
    4
#数据库实际数据:

mysql> select * from student;
+----+----------+------+-----------+---------+------------+
| id | name     | age  | phone     | address | teacher_id |
+----+----------+------+-----------+---------+------------+
|  1 | panbing  |   18 |  16547932 | 北京    |          1 |
|  2 | yancheng |   19 |    465465 | 湖南    |          2 |
|  3 | dachui   |   20 |  13587469 | 济南    |          3 |
|  4 | abo      |   21 | 147896523 | 山东    |          4 |
+----+----------+------+-----------+---------+------------+
4 rows in set (0.01 sec)
  • 对数据库的增
import pymysql

conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
cursor=conn.cursor()
sql=‘insert into student(id,name,age,phone,address,teacher_id) values("%s","%s","%s","%s","%s","%s")‘ #注意%s需要加引号
res=cursor.execute(sql,(5,‘liuhu‘,18,154789632,‘哈尔滨‘,4)) #执行sql语句,返回sql查询成功的记录数目
print(res)
conn.commit()
cursor.close()
conn.close()
执行结果
    1
数据库实际数据
mysql> select * from student;
+----+----------+------+-----------+----------+------------+
| id | name     | age  | phone     | address  | teacher_id |
+----+----------+------+-----------+----------+------------+
|  1 | panbing  |   18 |  16547932 | 北京     |          1 |
|  2 | yancheng |   19 |    465465 | 湖南     |          2 |
|  3 | dachui   |   20 |  13587469 | 济南     |          3 |
|  4 | abo      |   21 | 147896523 | 山东     |          4 |
|  5 | ‘liuhu‘  |   18 | 154789632 | ‘哈尔滨‘ |          4 |
+----+----------+------+-----------+----------+------------+
5 rows in set (0.00 sec)

#执行成功语句之后必须执行一句conn.commit()这样语句执行成功之后数据库里的数据才会显示。

#数据进行多条插入
import pymysql
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
cursor=conn.cursor()
sql=‘insert into student(name,age,phone,address,teacher_id) values("%s","%s","%s","%s","%s")‘ 

res=cursor.executemany(sql,[(‘liuhu‘,18,154789,‘西藏‘,4),
                            (‘huli‘,18,1589632,‘哈尔滨‘,3),
                            (‘cyhg‘,19,632,‘内蒙‘,2)])
print(res)
conn.commit()
cursor.close()
conn.close()
#结果
    3
#数据库数据
  • 对数据库的删
import pymysql

conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
cursor=conn.cursor()
sql = ‘truncate student‘
res=cursor.execute(sql) #执行sql语句
conn.commit()
cursor.close()
conn.close()
执行之后数据库实际数据:
mysql> select * from student;
Empty set (0.00 sec)
  • 对数据库的改
更改数据库的表的名称

import pymysql
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
cursor=conn.cursor()
res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
conn.commit()
cursor.close()
conn.close()

执行后的结果

mysql> select * from student;
ERROR 1146 (42S02): Table ‘day47.student‘ doesn‘t exist

mysql> select * from hello;
Empty set (0.00 sec)

  • 对数据库的查
import pymysql

conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
cursor=conn.cursor()
sql = ‘select * from hello‘
res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(res)
print(cursor.fetchone())
print(cursor.fetchone())
print(cursor.fetchmany(2))
print(cursor.fetchone())
conn.commit()
cursor.close()
conn.close()
输出结果:
6
(1, "‘liuhu‘", 18, 154789, "‘西藏‘", 4)
((2, "‘huli‘", 18, 1589632, "‘哈尔滨‘", 3), (3, "‘cyhg‘", 19, 632, "‘内蒙‘", 2))
(4, "‘liuhu‘", 18, 154789, "‘西藏‘", 4)
((5, "‘huli‘", 18, 1589632, "‘哈尔滨‘", 3),)
((6, "‘cyhg‘", 19, 632, "‘内蒙‘", 2),)

#fetchone()是显示一条数据,从头开始显示
#fetchmany()是更爱光标的位置括号内的值就是执行第几个光标

import pymysql
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
cursor=conn.cursor()
sql = ‘select * from hello‘
res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(res)
print(cursor.fetchall())
conn.commit()
cursor.close()
conn.close()
输出结果:
6
((1, "‘liuhu‘", 18, 154789, "‘西藏‘", 4), (2, "‘huli‘", 18, 1589632, "‘哈尔滨‘", 3), (3, "‘cyhg‘", 19, 632, "‘内蒙‘", 2), (4, "‘liuhu‘", 18, 154789, "‘西藏‘", 4), (5, "‘huli‘", 18, 1589632, "‘哈尔滨‘", 3), (6, "‘cyhg‘", 19, 632, "‘内蒙‘", 2))

#fetchall()是显示表中所有的数据

2.execute()之sql注入

#示例代码:
import pymysql

username = input(‘用户名:》》‘).strip()
userpasswd = input(‘密码:》》‘).strip()
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
cursor=conn.cursor()
sql=‘select * from user where name="%s" and passswd="%s"‘ %(username,userpasswd) #注意%s需要加引号
print(sql)
res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(res)
conn.commit()
cursor.close()
conn.close()
if res:
    print(‘登陆成功‘)
else:
    print(‘登陆失败‘)
注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符

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

最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name=‘egon‘;则--之后的条件被注释掉了

#1、sql注入之:用户存在,绕过密码
egon‘ -- 任意字符

#2、sql注入之:用户不存在,绕过用户与密码
xxx‘ or 1=1 -- 任意字符

示例图片(跳过密码):

1.

2.

解决方法:

# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name=‘%s‘ and password=‘%s‘" %(user,pwd)
# print(sql)
# res=cursor.execute(sql)

#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

示例代码:
import pymysql

username = input(‘用户名:》》‘).strip()
userpasswd = input(‘密码:》》‘).strip()
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘‘,database=‘day47‘,charset = ‘utf8‘)
cursor=conn.cursor()
sql=‘select * from user where name=%s and passswd=%s‘#注意%s需要加引号
print(sql)
res=cursor.execute(sql,[username,userpasswd]) #执行sql语句,返回sql查询成功的记录数目
print(res)
conn.commit()
cursor.close()
conn.close()
if res:
    print(‘登陆成功‘)
else:
    print(‘登陆失败‘)

示例结果:

来自为知笔记(Wiz)

时间: 2025-01-04 07:35:18

2017-9-14的相关文章

51CTO论坛搜索升级,支持模糊查询 2017.6.14

51CTO论坛搜索进行升级,使用新搜索算法,支持模糊查询,更容易查找到相关帖子.目前的结果切换到so.51cto.com,欢迎大家体验.在论坛首页顶部搜索框搜索已经支持最新搜索技术,后续会在版块页.帖子页的搜索也使用新搜索技术.2017.6.14 过去的论坛搜索,是在论坛数据库搜索,一方面搜索需要等待时间长,点击一次才能进入,另一方面搜索不支持模糊查询,经常找不到搜索结果. 这次搜索的升级切换,也依然可能有问题,欢迎大家留言说说自己的体验和问题,后面我们还会继续优化搜索算法,提升搜索体验.

[2017.3.14]代码穿梭机 王者荣耀

1 #include<cmath> 2 #include<queue> 3 #include<cstdio> 4 #include<vector> 5 #include<cstdlib> 6 #include<cstring> 7 #include<iostream> 8 #include<algorithm> 9 #define N 10000010 10 #define RG register 11 #de

2017.3.14作业

1.使用快捷键切换到虚拟终端2 2.使用普通用户身份登录,查看系统提示符 3.使用命令退出虚拟终端2上登录的用户 4.使用快捷键切换到虚拟终端5 5.使用命令退出虚拟终端5上登录的用户 6.?切回图形界面,右单击桌面打开终端,输入关闭系统的命令 ?查看哪些用户在系统上工作 ?修改当前时间为2018年8月26号11:28 ?查看2015年10月份日历 ?使用两种方法查看ls命令的使用说明 ?清除屏幕 ?使用"useradd tom"命令新建tom用户,为tom用户设置密码"12

2017.4.14 JAVA的包装类 【转】

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类. 包装类均位于Java.lang包,包装类和基本数据类型的对应关系如下表所示: 包装类对应表 基本数据类型 包装类 byte Byte boolean Boolean short Short char Ch

2017.12.14 1周4次

1.13 单用户模式 1.重启命令  [Shutdown –r now]; [Reboot]; [Init 6]; [poweoff] 2.更改root密码 1)重启系统,在启动界面上按下方向键,不让它进入系统,停留在开机界面 移动光标定位在第一行,按[e]键进入grub(找到系统启动盘)编辑界面 2)修改配置 在这个页面,找到linux16这一行,将之前的[ro],改为[rw init=sysroot/bin/sh] 按[ctrl+x],to start, 3)修改密码 命令[chroot /

2017.07.14【NOIP提高组】模拟赛B组

Summary 这次比赛因为迟到了,少了很多时间,也受到了相应的惩罚,这是好的,是个标记牌,警醒着我.这次比赛的题目很难,也就是说,大家的得分都很低,总的来说,收获还是很大的,因为有非常多的技巧被掌握了.我对细节的处理不足,这几天的比赛都是这样,每天弄到很晚结果就是一个小小的细节. Problem T1 最大公约数 题目大意 让你求

2017.4.14

上午英语翻译句子并解析以及看了阅读(基础部分)的导学和2010T1(上)视屏. 下午数学听课内容为一元函数积分学的计算部分内容.

April 5 2017 Week 14 Wednesday

Today is a perfect day to start living your dream. 实现梦想,莫如当下. Miracles may happen every day. If you choose to live your dream and strive for it, then it may be a perfect day. Sometimes, we feel we have tried our best but we still failed, yes, man pro

2017/3/14 星期二

今天看了jquery视频学习了 1.jquery动态添加,删除元素节点,替换包裹节点 2.radio 和checkbox相关选择过滤器的操作 3.学习并制作了微博发布界面1,2 4.利用jquery和bootstrap快速开发网页 5.学会了js中键值对的操作 6.明确区别jquery函数中dom元素参数和jquery元素 尚未解决的问题 1.boostrap弹窗框原理 2.js 中的冒泡和jquery的冒泡

2017.3.14下午

活动目录(Active Directory)是面向Windows Standard Server.Windows Enterprise Server以及 Windows Datacenter Server的目录服务.活动目录服务是Windows Server 2000操作系统平台的中心组件之一.理解活动目录对于理解Windows Server 2000的整体价值是非常重要的.这篇关于活动目录服务所涉及概念和技术的介绍文章描述了活动目录的用途,提供了对其工作原理的概述,并概括了该服务为不同组织和机