• python操作Mysql


    连接Mysql建库建表
    连接服务器中mysql!
    信息: IP: 39.98.39.173 用户名: root 密码: root

    1. 图形界面工具: navicate

    2. 建库

    3. 建表

    分析
    Python操作数据库

    学生表students

    学生对象包含属性(id,姓名,性别,年龄,生日,手机号,地址...) #根据业务需求随意扩展!

    对应列

    Python操作数据库

    列名 类型 要求
    id int整数 主键(primary key) 自增
    ---- ---- ----
    name varchar(20) 字符串 必须写字符串大小,不为空!
    ---- ---- ----
    sex char(2) 性别是固定的字符用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

    安装模块

    pip install pymysql

    增删改
    SQL
    python实现非查询
    非查询:步骤一样的!
    区别: 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):
    conn= pymysql.connect(host='IP地址',port=13306,user='用户名',passwd='密码',db='数据库名',charset='utf)
    conn.close() #关闭
    cur= conn.cursor() 创建游标
    游标 Cursor 操作数据库依靠游标!
    conn =pymysql.connect(host='39.98.39.173',port=13306,user='root',passwd='root',db='1909C2',charset='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()
    

    学生管理系统mysql版:

    import pymysql
    def show_menu():
        '''显示菜单'''
        print('*******欢迎使用学生管理系统*************')
        print('*******	 1.增加学生信息************')
        print('*******	 2.删除学生信息************')
        print('*******	 3.修改学生信息************')
        print('*******	 4.根据名字查询************')
        print('*******	 5.退出系统************')
    
    
    
    
    def add_stu(sql):
        '''增加'''
        #2.建连接
        coon = pymysql.connect(host = 'localhost',port=13306,user = 'root',passwd = 'root',db = 'students',charset = 'utf8')
        print(coon)
        #3.获取游标
        cur = coon.cursor()
        #4.执行sql
        num = cur.execute(sql)
        coon.commit()  # 必须手动提交到数据库!
        # 5. 释放资源
        cur.close()
        coon.close()
        return num
    
    def del_stu(name):
        # 2.建连接
        coon = pymysql.connect(host='localhost', port=13306, user='root', passwd='root', db='students', charset='utf8')
        print(coon)
        # 3.获取游标
        cur = coon.cursor()
        # 4.执行sql
        sql = 'delete from students where name =%s'
        num = cur.execute(sql, (name))
        print(f'影响行数:{num}')
        coon.commit()  # 必须手动提交到数据库!
        # 5. 释放资源
        cur.close()
        coon.close()
    
    def my_execute(sql,params):
        # 2.建连接
        coon = pymysql.connect(host='localhost', port=13306, user='root', passwd='root', db='students', charset='utf8')
        print(coon)
        # 3.获取游标
        cur = coon.cursor()
        # 4.执行sql
        num = cur.execute(sql, params)
        # print(f'影响行数:{num}')
        coon.commit()  # 必须手动提交到数据库!
        # 5. 释放资源
        cur.close()
        coon.close()
        # 返回影响行数!
        return num
    
    def get_one():
        # 1. 连接
        coon = pymysql.connect(host = 'localhost',port=13306,user = 'root',passwd = 'root',db = 'students',charset = 'utf8')
        # 2. 打开游标
        cur = coon.cursor()
        # 3. 执行
        sql ='select * from students where name = %s'
        cur.execute(sql,(name))
        #result = cur.fetchone()
        result = cur.fetchall()
        print(result)
        for stu in result:
            print(f'id:{stu[0]},名字:{stu[1]}')
    
        # 4.关闭资源
        cur.close()
        coon.close()
    
    if __name__ == '__main__':
        while True:
            show_menu()
            num = int(input('请输入选择的菜单(1-5):'))
            if num==5:
                print('感谢使用,退出程序!')
                flag = input('确定要退出么(y退出/n不退出!):?')
                if flag=='y':
                    break  #循环结束
                else:
                    continue # 中断本次
            elif num == 1:
                n = input('请输入你要增加的姓名:')
                s = input('请输入你要增加的性别:')
                a = input('请输入你要增加的年龄:')
                b = input('请输入你要增加的生日:')
                p = input('请输入你要增加的手机号:')
                d = input('请输入你要增加的地址:')
                sql = 'insert into students(name,sex,age,brithday,phone,addr) values(%s,%s,%s,%s,%s,%s)'
                params = (n, s, a, b, p, d)
                if my_execute(sql, params) > 0:
                    print('数据库操作成功!')
                else:
                    print('数据库操作失败!')
            elif num == 2:
                del_stu(name=input('请输入要删除的名字'))
            elif num == 3:
                del_stu(name=input('请输入要修改人的名字'))
                name = input('请输入你要修改的姓名:')
                sex = input('请输入你要修改的性别:')
                age = input('请输入你要修改的年龄:')
                brithday = input('请输入你要修改的生日:')
                phone = input('请输入你要修改的手机号:')
                addr = input('请输入你要修改的地址:')
                sql = 'insert into students(name,sex,age,brithday,phone,addr) values(%s,%s,%s,%s,%s,%s)'
                params = (name,sex,age,brithday,phone,addr)
                if my_execute(sql, params) > 0:
                    print('数据库操作成功!')
                else:
                    print('数据库操作失败!')
            elif num == 4:
                name= input('请输入查询的姓名:')
                get_one()
    
  • 相关阅读:
    XML解析
    资源管理
    Android中的动态字符串的处理
    消息提示的三种方式
    程序调控和监视(Logcat,Debug)
    选择改变事件OnCheckedChange
    递归和非递归分别实现求n的阶乘
    递归和非递归分别实现strlen
    编写一个函数 reverse_string(char * string)实现:将参数字符串中的字符反向排列 。(递归实现)
    写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
  • 原文地址:https://www.cnblogs.com/wml3030/p/13930473.html
Copyright © 2020-2023  润新知