Day05笔记
1、事务和事务回滚
1、定义 :一件事从开始发生到结束的过程
2、作用 :确保数据的一致性
3、事务和事务回滚应用
SQL命令默认自动提交到数据库执行
show variables like "autocommit"
1、开启事务
mysql>begin;
2、终止事务
mysql>commit; | rollback;
3、案例
1、背景
你 :建行卡
你朋友 :工商卡
你在建行自动取款机给你朋友转账5000
2、建表
表1 :CCB name、money
表2 :ICBC name、money
3、过程
mysql> 到自动提款机输入了账号和转账金额,点转账按钮 c
mysql> begin;
mysql> update CCB set money=money-5000 where name=" 有钱人";
mysql> update ICBC money=money+5000 where name="穷人";
mysql> rollback;
mysql> 转账失败 c
4、注意
事务只针对于表记录操作(增删改),对库和表的操作无效
2、与Python交互
1、python3
1、模块名 :pymysql
2、安装
1、在线 :sudo pip3 install pymysql==0.7.11
2、离线 :pymysql-0.7.11.tar.gz
$ tar -xf pymysql-0.7.11.tar.gz
$ cd pymysql0.7.11
$ python3 setup.py install
##安装pip3##
sudo apt-get install python3-pip
2、python2
1、模块名 :MySQLdb
2、安装 :sudo pip install mysql-python
3、环境准备
1、创建库db5,utf8
create database db5 charset utf8;
2、创建表t1
use db5;
create table t1(
id int primary key auto_increment,
name varchar(20),
score float(5,2)
)charset=utf8;
3、插入3条记录
insert into t1 values
(1,"李白",60),
(2,"杜甫",70),
(3,"白居易",80); 10:45分
4、pymysql使用流程
1、数据库连接对象 :db = pymysql.connect(...)
2、游标对象 :cur = db.cursor()
3、执行命令 :cur.execute('sql命令')
4、提交 :db.commit()
5、关闭游标 :cur.close()
6、关闭数据库连接 :db.close()
5、数据库连接对象(db)方法
1、db.commit() :提交到数据库执行
2、db.rollback() :回滚
3、db.close() :断开与数据库连接
4、db.cursor() :创建游标对象
6、游标对象(cur)方法
1、cur.execute(sql命令) :执行sql命令
2、cur.close() :关闭游标对象
3、cur.fetchone() :取第1条(查询)
4、cur.fetchmany(n) :取n条(查询)
5、cur.fetchall() :取所有记录(查询)
7、connect()连接对象的参数
1、host :主机地址
2、user :用户名
3、password :密码
4、database :库名
5、charset :字符集(推荐utf8)
6、port :端口号(3306)
#sql语句参数化 import pymysql db =pymysql.connect(host ='localhost',user ='root',password ='123456',charset ='utf8', port =3306,database ='db5') cur =db.cursor() while True: c =input('按q退出,按回车输入学生信息') if c.strip().lower() =='q': break name =input('请输入姓名') score =input('请输入成绩') try: ins ="insert into t1(name,score) values(%s,%s)" # ins ="insert into t1(name,score) values('%s','%s')" %(name,score) cur.execute(ins,[name,score]) db.commit() print('ok') except Exception as e: db.rollback() print('shibai',e) cur.close() db.close()
from pymysql import * class Mysqlpython: def __init__(self,database,host="localhost", user="root",password="123456", charset="utf8",port=3306): self.database = database self.host = host self.user = user self.password = password self.charset = charset self.port = port # 创建数据连接和游标对象 def open(self): self.db = connect(host=self.host, user=self.user, password=self.password, port=self.port, database=self.database, charset=self.charset) self.cur = self.db.cursor() # 关闭游标对象和数据库连接对象 def close(self): self.cur.close() self.db.close() # 执行sql命令 def zhixing(self,sql,L=[]): self.open() self.cur.execute(sql,L) self.db.commit() self.close() # 查询功能 def all(self,sql,L=[]): self.open() self.cur.execute(sql,L) result = self.cur.fetchall() return result # if __name__ == "__main__": # sqlh = Mysqlpython("db5") # # upd = "update t1 set score=100 where name='小哥哥'" # # sqlh.zhixing(upd) # sel = "select * from t1" # r = sqlh.all(sel) # print(r)
3、ORM(Object Relation Mapping对象关系映射)
1、定义
把对象模型映射到MySQL数据库中
2、sqlalchemy安装
在线 :sudo pip3 install sqlalchemy
离线 :
$ tar -xf sql....tar.gz
$ cd sqlalchemy
$ sudo python3 setup.py install
3、示例
class User(Base):
__tablename__ = "t123"
id = Column(Integer,primary_key=True)
name = Column(String(20))
4、映射类型
1、Python类(class) <--> 数据库中表
class User ... t123
2、Python中类属性 <--> 数据库中表字段(id ..)
id = Column(Integer)
3、关系映射
1:1 :主外键关联,添加唯一约束
1:n :主外键关联
m
m:n :通过中间表实现,见
5、示例
1、在db5库创建表t123,表中字段有
id 整型,设置为主键,自增长
name 字符类型,宽度20
phnumber 字符类型,宽度11
图形界面
Windows :Navicat