提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、pymysql
1、 安装与连接
--- 安装 pip install pymysql ---连接 user=None, password="", host=None, database=None, ---这里我们使用try try: # 如果不能保证一定正确 conn = pymysql.connect( user='root', password="root", host='127.0.0.1', database='py2204', port=3306, charset="utf8" ) except Exception as e: print(e) conn.close() 关闭连接 conn.commit() 提交数据 conn.rollback() 撤销数据
2、 查
---1.通过通过连接对象创建游标对象 cursor = conn.cursor() ---2.编写指令 sql = "select * from student" ---3.发送指令 res = cursor.excute(sql) print(res) # 这里我们返回的是影响的行数
rows = cursor.fetchall() # 查询所有 print(rows) 打印如下: ((1, '赵一', 10, 172.0, 60.0), (2, '钱二', 17, 160.5, 50.0), (3, '孙三', 16, 152.2, 47.0), (4, '李四', 10, 177.5, 62.0), (5, '周五', 12, 168.0, 55.0), (6, '吴六', 12, 157.9, 50.0), (7, '郑七', 11, 156.0, 45.0), (8, '王八', 20, 160.5, 45.0), (9, '冯九', 12, 166.7, 60.0), (10, '陈十', 16, 167.5, 65.0)) for row in rows: # 遍历一下 print(row) 打印如下: (1, '赵一', 10, 172.0, 60.0) (2, '钱二', 17, 160.5, 50.0) (3, '孙三', 16, 152.2, 47.0) (4, '李四', 10, 177.5, 62.0) (5, '周五', 12, 168.0, 55.0) (6, '吴六', 12, 157.9, 50.0) (7, '郑七', 11, 156.0, 45.0) (8, '王八', 20, 160.5, 45.0) (9, '冯九', 12, 166.7, 60.0) (10, '陈十', 16, 167.5, 65.0)
---查询下一条 cursor = conn.cursor() sql = "select * from student" res = cursor.execute(sql) # 返回 影响 的条数 rows = cursor.fetchone() # 查询所有 print(rows) 打印如下: (1, '赵一', 10, 172.0, 60.0)
---为了避免输出的数据不清楚是啥可以通过字典进行一一对应 cursor = conn.cursor() sql = "select * from student" res = cursor.execute(sql) # 返回 影响 的条数 rows = cursor.fetchall() # 查询所有 # 获取所有字段 fields = [fields[0] for fields in cursor.description] print(fields) 打印如下: ['id', 'name', 'age', 'height', 'weight'] ---将对应所有字段序列化,格式化 dic_rows = [dict(zip(fields, row)) for row in rows] # print(dic_rows) for row in dic_rows: print(row)
3、 增、删、改
3.1 增
cursor = conn.cursor() sql = "insert into student(name, age) values('new_insert', 16)" res = cursor.execute(sql) print(res) ---按之前的查来看应该会直接插入到表中,但是实际并没有,因为事务干扰,故需要提交事务 conn.commit() ---提交事务
3.2 删
cursor = conn.cursor() sql = "delete from student where id = 5" res = cursor.execute(sql) conn.commit()
3.3 改
cursor = conn.cursor() sql = "update student set name='李九' where id=9" res = cursor.execute(sql) print(res) conn.commit()
所有的 "写" 操作都需要提交事务才会写入数据库
二、事务
1、事务的特性
- 原子性(atomicity ) :一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做;
- 一 致性(consistency ) : 事务必须是使数据库从一个一致性状态变到另一个致性状态。一致性与原子性是密切相关的 ;
- 隔离性 (isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰 ;
- 持久性(durability ):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的(数据写入完毕,无法再改变)。
2、操作
conn.close() 关闭连接 conn.commit() 提交事务 conn.rollback() 回滚撤销
三、 SQL注入
SQL注入即是指攻击者可以在WEB应用程序中事先定义好的询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询从而进一步得到相应的数据信息。具体略。
四、结语
最是仓皇辞庙日,教坊犹奏别离歌,垂泪对宫娥。----李煜《破阵子·四十年来家国》