MySQL初级篇(四)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、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语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询从而进一步得到相应的数据信息。具体略。

四、结语

最是仓皇辞庙日,教坊犹奏别离歌,垂泪对宫娥。----李煜《破阵子·四十年来家国》

请添加图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小馒头学python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值