目录
part1:用python连接MysqL
1.用python连接MysqL的基本语法
创建连接conn→创建游标对象cursor→执行sql语句execute→获取数据fetchone→释放游标对象cursor→关闭连接conn
# (1) 创建连接 host user password database 这四个参数必须写 conn = pyMysqL.connect(host="127.0.0.1",user=root123456db0826utf8) (2) 创建游标对象(该对象可以操作数据库增删改查) cursor = conn.cursor() (3) 执行sql语句 sql = select * from employee" 返回的是数据的总条数 res = cursor.execute(sql) print(res) (4)获取数据 fetchone 获取一条 res = cursor.fetchone() res = cursor.fetchone() (5) 释放游标对象 cursor.close() (6) 关闭连接 conn.close()
2.用python 创建&删除表
1,2,5,6步骤都是不变的,只改变3.4步即可
conn = pyMysqL.connect(host=") cursor = 1.创建一张表 sql = """ create table t1( id int unsigned primary key auto_increment,first_name char(10) not null,last_name char(10) not null,age int unsigned,sex tinyint,money float ) """ res = cursor.execute(sql) # print(res) 2.查看表结构 sql = "desc t1" res = cursor.execute(sql) print(res) # 6条字段数据 print(cursor.fetchone()) print(cursor.fetchone()) print(cursor.fetchone()) print(cursor.fetchone()) print(cursor.fetchone()) print(cursor.fetchone()) 3.删除表 try: sql = "drop table t1" res = cursor.execute(sql) print(res) except: pass """ cursor.close() conn.close()
3.用python操作事务处理
pyMysqL 操作事务处理时,需要commit提交数据,才会变化,否则rollback回滚.恢复到最初状态
请注意:你sql语句里写的是增删改,你得到的execute的返回值没有任何意义,所以你fetchone是无效的,只有你sql语句写的是查询的操作,fetchone才能获取到数据
conn = pyMysqL.connect(host= conn.cursor() sql1 = begin sql2 = update employee set emp_name = '123egon' where id = 1 sql3 = commit res1 = cursor.execute(sql1) res2 = cursor.execute(sql2) res3 = cursor.execute(sql3) print(res1,res2,res3) # 返回值没有意义 fetchone 与查询sql有关,增删改无效; tup = cursor.fetchone() print(tup) cursor.close() conn.close()
part2:sql注入攻击
先创建一张用户名-密码表
create table usr_pwd( id int unsigned primary key auto_increment,username varchar(255) not null,password varchar(255) null )
1.sql注入的现象
import pyMysqL user = input(请输入用户名: >>> ).strip() pwd = input(请输入密码: >>> ).strip() conn = pyMysqL.connect(host= conn.cursor() sql = select * from usr_pwd where username='%s' and password='%s' " % (user,pwd) (sql) res =print(res) 查询的条数 if res: print(登录成功) else: 登陆失败) cursor.close() conn.close()
输入时账号输入:sfsdf' or 3=3 -- sdfsd 密码随意输入都可以登录成功
原因:-- 后面的字符串都会被注释掉,前面账号虽然是错的 但是 2=2是真的 绕开了账号和密码的判断;
select * from usr_pwd where username='afasdfasdfasdf' or 2=2 -- sfasdf' and password='3434
2.预处理机制:防止sql注入现象
使用预处理机制,可以避免绝大多数sql注入的问题
execute 如果参数为2个,将默认开启预处理
execute(sql,(参数1,参数2,参数3 .... ) )
).strip() conn = pyMysqL.connect(host= conn.cursor() sql = select * from usr_pwd where username=%s and password=%s res = cursor.execute(sql,(user,pwd) ) 登陆成功" if res else 登录失败) cursor.close() conn.close()
part3:python操作MysqL增删改查
1.创建游标时,可以指定返回值类型为其他(默认是元组)
创建MysqL 链接 conn = pyMysqL.connect(host= 查询数据,默认是元组,可以设置返回的类型为字典 pyMysqL.cursors.DictCursor cursor = conn.cursor(cursor=pyMysqL.cursors.DictCursor)
2.python操作MysqL增操作
cursor.executemany:可以一次插入多条数据
cursor.lastrowid:获取最后插入这条数据的id号(仅针对单条数据插入)
sql增语句 sql = insert into t1(first_name,last_name,age,sex,money) values(%s,%s,%s)" 一次插入一条 res = cursor.execute(sql,(宋云杰) ) 1 获取最后插入这条数据的id号(针对单条数据插入) print(cursor.lastrowid) 3 一次插入多条 res = cursor.executemany( sql,[ (高云峰戈隆袁伟倬刘欣慰) ] ) 打印的是插入的条数4 针对于多条数据,搜最后的id 可以通过倒序查询id sql = select id from t1 order by id desc limit 1(res) 获取最后一个id号 res =print(res)
3.python操作MysqL删操作
4.python操作MysqL改操作
5.python操作MysqL查操作
要注意:fetchone fetchmany fetchall 都是基于上一条数据往下查询
1.获取一条数据:fetchone
2.获取多条数据:fetchmany
sql = data = cursor.fetchmany() 括号里不写参数,默认搜索的的是一条数据 (data) data = cursor.fetchmany(3) 基于上一次获取完的位置再获取三条 print(data)
data一共是三条数据,我们可以通过for循环取出每一条数据,并且按照自己的格式进行拼接
for row in data : print(row) first_name = row[first_name] last_name = row[last_name] age = row[age] if row[sex"] == 0: sex = 女性" : sex = 男性 money = row[money姓:{},名:{},年龄:{},姓名:{},收入:{}".format(first_name,money) )
3.获取所有数据: fetchall
sql = data = cursor.fetchall() print(data)
1.相对滚动 (正数相对于当前位置往后滚,负数相对于当前位置往后滚.)
向前滚3个 cursor.scroll(3,mode=relative) res = 往后滚2个 cursor.scroll(-2,1)">print(res)
2.绝对滚动,永远基于第一条数据的位置进行移动
cursor.scroll(0,1)">absolute(cursor.fetchone()) cursor.scroll(1,1)">(cursor.fetchone()) cursor.scroll(3,1)">(cursor.fetchone()) 往前滚没有数据,超出范围 error报错 cursor.scroll(-1,1)"> 在进行增删改查时,必须提交数据,才会产生影响. conn.commit() cursor.close() conn.close()
part4:导出导入数据库
1.导出数据库
第二步: 切换到对应的路径(你想将导出的数据库文件放到哪个目录)
MysqLdump -uroot -p db0824 > db0824.sql
MysqLdump -uroot -p db0824 > db0824.sql
导出数据库中的单个表
MysqLdump -uroot -p db0824 t1 > t1.sql
2.导入数据库
第三步 : source 路径/文件
use 数据库
source D:\db0824.sql
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。