zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    LeetCode 647. Palindromic Substrings
    jquery--find与children方法的区别
    JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember
    javascript之原型prototype
    js的数据格式之json
    Javascript:必须知道的Javascript知识点之“单线程事件驱动”
    javascript自我测试题
    javascript:delete 删除对象的属性
    javascript:function 函数声明和函数表达式 详解
    [转]JavaScript可否多线程? 深入理解JavaScript定时机制
  • 原文地址:https://www.cnblogs.com/sky-ai/p/9774372.html
Copyright © 2011-2022 走看看