首页 > 技术文章 > python操作Mysql

wml3030 2020-11-05 10:49 原文

连接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('*******\t 1.增加学生信息************')
    print('*******\t 2.删除学生信息************')
    print('*******\t 3.修改学生信息************')
    print('*******\t 4.根据名字查询************')
    print('*******\t 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()

推荐阅读