zoukankan      html  css  js  c++  java
  • python进阶07 MySQL

    python进阶07 MySQL

    一、MySQL基本结构

      1、认识MySQL

    #MySQL不是数据库,它是数据库管理软件
    #MySQL如何组织数据
    #如何进入MySQL数据库
    #其他注意事项
    
    #以表格的形式来储存数据
    #MySQL管理数据库,数据库内衣表格的形式来储存数据

       2、进入与退出 数据库

    mysql -u(username) -p(password)#括号是不存在的,只是为了标重点,username用户名,password密码
    
    exit #直接退出

      3、注意事项

    #语句结束符:每个语句都以;或G结束
    #大小写:不严格区分大小写
    #类型:强制数据类型、任何数据都有自己的类型
    #逗号:最后一行不需要逗号

    二、库,表级的操作

      1、库级 管理语句

    SHOW DATABASES;#显示所有库
    
    CTEATE DATABASE db_name;#创建库
    SHOW CREATE DATABASES db_name;#显示库创建信息
    
    DROP DATABASE db_name; #删除库
    
    USE db_name;#切换当前数据库,切换到该数据库才可以操作
    
    #小写的内容可以自己定义,大写的内容不能

      2、表级操作

    SHOW TABLES; #显示所有表
    
    CREATE TABLES tb_name(columns);#创建表,表格内容必须要有一列,所以在创建时就
    SHOW CREATE TABLES tb_name;#显示表创建信息
    
    DROP TABLE tb_name;#删除表
    #常用约束
    INT/BOOL #整数:整型,布尔型
    DOUBLE/DECIMAL #实数:浮点数,定点数类型
    CHAR/VARCHAR #文本
    DATE/DATETIME #时间
    import pymysql
    
    CREATE TABLE students(
      number CHAR(9),#固定长度的字符串,例如201801012;    逗号表示列名的切换
      name VARCHAR (20), #最长可以是20个长度的可变长度字符串
      age INT,#年龄类型,整型
      birth DATE #日期类型;    最后一列不要加逗号
    );
    
    SHOW CREATE TABLE students;#输出  | students | CREATE TABLE `students` (`number` char(9) DEFAULT NULL,`name` varchar(20) DEFAULT NULL,`age` int(11) DEFAULT NULL,`birth` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    
    #若要显示更漂亮,输入SHOW CREATE TABLE studentsG

      3、数据级 CRUD操作

        #CRUD就是增删改查

    C(Create)----INSERT INTO VALUES #增加,创建一行数据
    1、INSERT INTO tb_name(col_names) VALUES (col_values);#指定列插入
    
    2、INSERT INTO tb_name VALUES (all_values);#全列插入
    
    3、INSERT INTO tb_name(col_names) VALUES(value_1),(value_2),...;多行插入
    
    INSERT INTO students(number,name,age) VALUES ('20181001','tuple',19); #前后一一对应
    
    INSERT INTO students VALUES ('20181001','tuple',19,'19901028');#全列插入时,所有数据都需要输入,不能少
    
    INSERT INTO students(number,name,age) VALUES ('20181001','tuple',19),('20181002','tuple1',18)...#一次性插入多行
    
    #如果每一行都插入一次,那么就需要给MySQL发送n次数据
    #如果所有行一次插入,只需要与MySQL通信一次
    R(Read)----SELECT FROM WHERE
    
    1、SELECT col_names FROM tb_name;#指定列查询
    
    2、SELECT * FROM tb_name;#全列查询
    
    3、SELECT col_names FROM tb_name WHERE conditions;带条件的查询
    
    SELECT name,age FROM students;#指定列的表
    
    SELECT * FROM students;#整张表
    
    SELECT name,age FROM students WHERE name='tuple'#就想看名字是tuple的人的内容,conditions是条件(相当于筛选)
    U(UPDATE)----UPDATE SET WHERE#修改,更新
    
    UPDATE tb_name SET filed_1=value_1 filed_2=values_2 ...  WHERE a_filed=a_value;
    
    UPDATE students SET age=19 WHERE name='xiaopo'#SET 是列,WHERE是条件
    D(Delect) ---- DELECT FROM WHERE #删除
        
    DELECT FROM tb_name WHERE a_filed=a_value;
    
    DELECT FROM students WHERE name='tuple'#只删除tuple老师的内容
    
    #实际上做开发不会真的删除数据,我们宁可让数据留在里面废弃,也不删除,可以在数据列最后加一列是否以删除
    
    # C 创建 R 读取 U 更新 D 删除  也就是所谓的增删改查 CRUD 

       4、用python操作mysql

    #DB-API问题引入
    #python是不能直接操作MySQL的
    #DB-API是什么东西
    #其实连接器有很多种,现在最流行的是pymysql,但是还有别的
    #如果,每个连接器都用一种语法,这会很难记忆,所以python官方给出了设计连接器的标准
    #这也就是所谓的DB-API(统一但是接口标准)
    #pymysql是连接python和mysql的连接器
    
    #导入pymysql包
    #创建一个py文件---->点击settings---->点击project右边的—绿色+号---->搜索pymysql包,导入即可
    
    #pip  如果pycharm用的是虚拟环境,就需要在进入虚拟环境后在安装,如果不是,就直接pip3 install

     

    import pymysql
    
    pymysql.connect(**dbconfig)#连接接口
    cnn.close()#关闭接口
    
    conn.cursor()#游标接口    连接是不能操作数据库的,需要用连接生成游标来操作
    cur.close()# 关闭接口
    
    cur.execute(sql)#执行接口
    
    cur.fetchall()#结果集接口

      连接与退出数据库

    import pymysql
    
    db_config = {
        'user': 'root',#用户名
        'password': 'qwe123',#密码
        'db': 'python3',#数据库(使用连接器的时候,通常要指定需要连接的数据库)
        'charset': 'utf8',   #而不是utf-8,字符集
    }
    
    
    #生成一个连接
    conn=pymysql.connect(**db_config)#得到一个连接对象
    
    #使用从连接对象上生成一个“游标”
    cur=conn.cursor() 
    rv=cur.execute('SELECT * FROM students') #想操作说明就丢什么代码进去,这句话是执行这个语句
    res=cur.fetchall() #结果集操作,也就是拿到所有结果
    
    for entry in res:
        print(entry)
    #我们丢进去的sql也有可能报错,这样会使python报错
    #所以我们要加个异常机制进去
    try:
        cur=conn.cursor()#连接
        cur.execute('CREATE TABLE teachers(name VARCHAR(20))')#执行
        cur.execute('SHOW TABLES')#执行
    
        res=cur.fetchall()#显示
        for entry in res:#输出
            print(entry)
    
    except Exception as e:#如果报错,执行下面信息
        print(e)
        conn.rollback() #回滚,因为出错了,所以rollback撤销;回滚:假如说,我的脚本需要以下操作,一插入一个tuple老师,二插入一个lucky老师,必须要两个老师都插入,如果插入lucky老师的操作出错了,那么也应该把tuple老师的内容也删除掉,也就是回到上一次保存的状态
    finally:#不管怎么样,最后要把游标和连接全部关闭
        conn.commit()#commit提交,连接器必须要多这样一步,因为连接器操作的数据是没有直接生效的
        cur.close()
        conn.close()

     三、补充

      1、pycharm配置linux连接

    #没有配置环境是输入python进入的python2
    #学院给的已经配置好了虚拟环境,输入python进入的是python3
    #默认情况下,我们是不存在虚拟环境的
    #输入workon会出现两个环境,一个py2,一个py3
    
    #which python  查询python解释器所在路径
    
    #windows不能操作linux的文件,所以还需要映射,将windows的代码映射到linux中去
    
    #如何创建好任务在连接映射
    #Tools---->Dsplayment---->Configuration---->点绿色+好添加路径---->SFTP----->配置解释器:SETTINGS----> Project ... ---->点击齿轮

      2、推荐一个GUI操作数据库的软件 heidiSQL

  • 相关阅读:
    art-template学习(一)之特性和安装
    Velocity学习(四)之判断是否为空以及为什么要使用{}来明确标识变量
    Velocity学习(三)之 ${} 和$!{}、!${}区别
    sqlcode、sqlerrm
    批量删除存储过程
    cursor 与refcursor及sys_refcursor的区别 (转载)
    分享最近写的几个存储过程
    中国人寿数据库死锁处理
    合理计划 dictionary cache 大小
    表空间、数据文件对应关系
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8511354.html
Copyright © 2011-2022 走看看