zoukankan      html  css  js  c++  java
  • python连接mysql

    第九天

    核心任务:

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


    连接MySQL建库建表

    连接服务器中MySQL

    信息:ip:39.98.39.173 用户名:root 密码:root

    1.图形界面工具:navicat

     2.建库

     3.建表

    • 分析
    1. 学生表students
    2. 学生对象包含属性(id,姓名,性别,年龄,生日,手机号,地址。。)根据业务需求随意扩展
    3. 对应列
     列名 类型 要求
    id int整数 主键(primary key)自增
    name varchar(20)字符串 必须写字符串大小,不为空!
    sex enum(男,女) 性别是固定的字符用char(2)
    age int整数  
    phone varchar(11)字符串 176****0805
    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
    1 # 安装模块
    2 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()

    任务:

    • 增加
    • 删改
    • 查所有
    • 根据名字查

  • 相关阅读:
    Spring 框架Bean的初始化和销毁---方式:BeanPostProcessor后置处理器
    Spring 框架Bean的初始化和销毁 -- 方式:@PostConstruct注解和@PreDestroy注解
    Spring 框架Bean的初始化和销毁---方式:InitializingBean接口,DisposableBean接口
    Spring 框架Bean的初始化和销毁 ---方式: @Bean(initMethod = "init",destroyMethod = "destroy")
    消息队列入门理解
    springboot的定时任务使用(动态cron,缓存提速)
    【SpringBoot WEB 系列】RestTemplate 之自定义请求头
    【SpringBoot WEB系列】WebFlux静态资源配置与访问
    【SpringBoot WEB系列】静态资源配置与读取
    【SpringCloud 系列】Eureka 注册中心初体验
  • 原文地址:https://www.cnblogs.com/yuzui/p/13926872.html
Copyright © 2011-2022 走看看