mysql day05

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

猜你喜欢

转载自www.cnblogs.com/sky-ai/p/9774372.html