zoukankan      html  css  js  c++  java
  • python操作mysql(包含增删改查)

    核心任务

    • 操作mysql(图形界面)
    • 建库建表
    • 熟悉:CURD语句
    • python操作Mysql [重点]
    • 任务: 学生管理系统:数据存储在数据!

     连接Mysql建库建表

    连接服务器中mysql!
    信息: IP: 39.98.39.173 用户名: root 密码: root
    
    1. 图形界面工具: navicate

     

    2.建库

    3. 建表
    • 分析
    # 学生表students 
    # 学生对象包含属性(id,姓名,性别,年龄,生日,手机号,地址...) #根据业务需求随意扩展! 
    # 对应列!
    
    列名 类型 要求
    id int整数 主键(primary key)自增
    name varcgar(20)字符串 必须写字符串大小,不为空!
    sex char(2) 性别是固定的字符用char(2)
    age int整数  
    phone varchar(11)字符串 186****2688
    birthday datetime时间  
    addr varchar(50)字符串  

    Python操作数据库


    注意:python或任何编程语言php.java..net等,不能直接连接数据库!
    需要安装对应的数据库驱动(第三方模块) [比如: 不同品牌手机连接到电脑,需要安装驱动包,才传输数据]
    连接不同数据库,需要下载不同的驱动包!
    

    python操作数据库流程

    • 下载mysql驱动模块(pymysql)
    • 引入模块
    • 建连接(建立和数据库连接)
    • 执行sql语句
      • 非查询:增加,删,修改
      • 查询:select
    • 处理结果
    • 释放资源
      • 关连接
      • 关游标! 
    驱动介绍 
    python操作mysql驱动/第三方模块: MySQLdb PyMysql
    • pymysql: 支持2.x 支持3.x
    • mysqldb: 只支持3.x 
    #安装模块 
    pip install pymysql
    
    增删改 

    SQL 

    # 增加 insert into 表名(列1,列2,....) values(值1,值2,...) 
    # 删除 delete from 表名 ; # 删除表中所有数据! 
    delete from 表名 where 条件; 
    
    
    # 修改 
    update 表名 set 列1=值1,列2=值2,....; #不加条件,修改所有列!~ 
    update 表名 set 列1=值1,列2=值2,....where 条件; 
    
    
    select * from students where sex ='男'; 
    insert into students(name,sex,age,birthday,phone,addr) 
    values('刘帅','女',20,now(),'17600950805','山西') ; 
    update students set sex='男' where name ='刘帅' 
    delete from students where name ='刘晒'
    

    python实现非查询

    • 非查询:步骤一样的!
    • 区别: sql语句不同, 参数个数不同! 
    def my_execute(sql,params): 
          '''非查询通用功能! sql语句, 参数列表''' 
          # 2.连接
          conn = pymysql.connect(host='39.98.39.173',port=13306,user='root',passwd='root',db='1909C2',c harset='utf8') 
          print(conn) 
          # 3. 获取游标 
          cur = conn.cursor() 
          # 4. 执行sql 
          num = cur.execute(sql,params) 
          #print(f'影响行数:{num}') conn.commit() 
          # 必须手动提交到数据库! 
          # 5. 释放资源 
          cur.close() 
          conn.close() 
          # 返回影响行数! 
          return num 
    if __name__ == '__main__': 
          # 通用 
          sql ='insert into students(name,sex,age,birthday,phone,addr) values(%s,%s,%s,%s,%s,%s)' 
          params=('王五','女',39,'2020-11-03','17600950805','山西') 
          if my_execute(sql,params)>0: 
               print('数据库操作成功!') 
          else:
               print('数据库操作失败!') 
    
    参数如何传递 
    sql ='insert into students(name,sex,age,birthday,phone,addr) values(%s,%s,%s,%s,%s,%s)' 
    # 格式:一行数据就是一个元组! 
    params=('王五','女',39,'2020-11-03','17600950805','山西') 
    num = cur.execute(sql,params)
    
    批量执行非查询 
    sql ='insert into students(name,sex,age,birthday,phone,addr) values(%s,%s,%s,%s,%s,%s)' 
    # 格式:一行数据就是一个元组! 
    params=[('王五1','女',39,'2020-11-03','17600950805','山西'),('王五2','女',39,'2020-11- 03','17600950805','山西')] 
    num = cur.executemany(sql,params) # 结果大于1的
    

    核心对象

    • 连接对象: conn= pymysql.connect(host='IP地址',port=13306,user='用户名',passwd='密
    • 码',db='数据库名',charset='utf)
      • conn.close() #关闭
      • cur= conn.cursor() 创建游标
    • 游标 Cursor 操作数据库依靠游标!
      • num = cur.execute(sql,参数) 执行非查询,返回影响的行数!
      • num=cur.executemangy(sql,[(),(),..]) 批量执行非查询,返回影响行数!
      • cur.close()
      • cur.fetchone() 抓取1条,,返回元组或None
      • cur.fetchall() 抓取所有
      • cur.fetchmany(大小) 指定抓取大小
      • cur.next() 游标下移! 

    查询  

    import pymysql 
    def get_one(): 
         # 1. 连接 
         conn = pymysql.connect(host='39.98.39.173', port=13306, user='root', passwd='root', db='1909C2', charset='utf8') 
         # 2. 打开游标 
         cur = conn.cursor() 
         # 3. 执行 
         sql ='select * from students where sex = %s' cur.execute(sql,('女')) 
         #result = cur.fetchone() # 返回一个元组() 默认找第1个! 
         result = cur.fetchall() # 返回多个元祖 ((),(),(),...) 
         print(result)
         for stu in result: 
              print(f'id:{stu[0]},名字:{stu[1]}') 
         # 4.关闭资源 
         cur.close() 
         conn.close()
    if __name__ == '__main__': 
         get_one()
    

      

      

      

      

     

      

  • 相关阅读:
    线程概念简介 什么是线程 多线程上篇(七)
    进程通信概念简介 多线程上篇(六)
    进程同步经典示例 多线程上篇(五)
    进程同步概念简介 多线程上篇(四)
    进程控制概念简介 多线程上篇(三)
    进行概念详解 多线程上篇(二)
    操作系统与程序运行以及进程简介 多线程上篇(一)
    Mybatis动态SQL简单了解 Mybatis简介(四)
    Mybatis sql映射文件浅析 Mybatis简介(三)
    Mybatis配置信息浅析 MyBatis简介(二)
  • 原文地址:https://www.cnblogs.com/zuohangyu123/p/13932575.html
Copyright © 2011-2022 走看看