zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/wml3030/p/13930473.html
Copyright © 2011-2022 走看看