Python3操作数据库MySQL

 Python3 使用 PyMySQL 连接数据库

一. 安装PyMySQL

1.什么是PyMySQL

PyMySQL是在python3.x版本中用于连接MySQL服务器的一个库;

PySQL遵循Python数据库API v2.0规范,并包含了pure-Python MySQL客户端库。

2.安装PyMySQL

PyMySQL下载地址:GitHub - PyMySQL/PyMySQL: MySQL client library for Python

可以使用命令来安装PyMySQL:

pip install PyMySQL

若系统不支持pip命令,可以使用以下方式来安装:

  • 使用git命令下载安装包安装:
git clone https://github.com/PyMySQL/PyMySQL
cd PyMySQL/
python3 setup.py install
  • 若需要指定版本号,可以使用curl命令
# pymysql-X.X 为PyMySQL版本号
curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
cd PyMySQL*
python3 setup.py install

二. 数据库操作

1. 建立数据库连接

# host=数据库地址, port=端口号, user=用户名,password=密码,db=数据库, charset=编码

conn=pymysql.connect(host='127.0.0.1',
                     port=3306,
                     user='root',
                     password='root',
                     db='testpython',
                     charset='utf8',
                     autocommit=True )    #自动提交

2. 获取游标对象

cur=conn.cursor()

3. 使用游标进行读写操作

# 语法: cur.execute(sql)
cur.execute("select * from user")

4. 获取查询结果

# 获取一条数据,同时获取的数据会从结果集中删除
cur.fetchone()

# 获取多条数据
cur.fetchmany(num)

# 获取所有数据
cur.fetchall()

注意:获取完数据后,数据会从数据集中删除,再次获取会获取不到,所以在获取数据后最好保存给某个变量

5.  提交更改

conn.commit()

6. 执行插入操作

insert_q = "INSERT INTO user (column1, column2) VALUES (%s, %s)"
data_insert = ("value1, value2")
cursor.execute(insert_q, data_insert)
connection.commit()

7. 更新数据

update_q = "UPDATE user set column2 = %s WHERE column1 = %s"
new_value = "new_value"
old_value = "value1"
cursor.execute(update_q, (new_value, old_value))
connection.commit()

8.删除数据

delete_q = " DELETE FROM user WHERE colum1 = %s"
value_delete = "value1"
cursor.execute(delete_q, (value_delete, ))
connection.commit()

9. 关闭游标

cur.close()

10. 关闭连接

conn.close()

11.  回滚操作

conn.rollback()

三. 综合练习

1. 创建数据库表information(并插入不少于三条信息),字段信息如下:

数据名称数据类型是否唯一是否为空
pid(主键)intYESNO
users(账号)varchar(20)YESNO
cod(密码)varchar(20)NONO
name(姓名)varchar(20)NONO
age(年龄)intNONO
mobile(电话号码)varchar(50)NONO

2. 系统开始菜单如下

  • 【1】用户选择菜单1—— 用户信息注册

                要求:

                        1)添加用户信息,包括(账号、密码、姓名、年龄、手机号)

                        2) 账号不可重复

  • 【2】根据账号密码删除用户信息

                要求:

                        1)输入账号密码匹配,提示“删除成功”,

                       2) 输入账号不存在或账号密码不匹配,提示“账号不存在,查无此人”,并能重新输入 

  • 【3】根据账号密码修改指定用户信息

                要求:

                        检验账号密码匹配成功,则可以修改用户信息,包括(姓名、年龄、电话号码),                    提示“修改成功”,反之则提示“查无此人”

  • 【4】查询用户信息

                要求:查看前五条用户信息

  • 【5】退出系统

代码展示:

dao层

from utils.DBUtil import DBUtil


class Test:
    def add_database(self):
        connection = DBUtil.get_connection(self)
        cursor = connection.cursor()
        sql = '''
        create table if not exists information(
            pid int not null primary key auto_increment,
            users varchar(20) not null,
            cod varchar(20) not null,
            name varchar(20) not null,
            age int not null,
            mobile varchar(50) not null
        )
        '''
        cursor.execute(sql)
        DBUtil.close_all(self, connection, cursor)

    def add(self):
        connection = DBUtil.get_connection(self)
        cursor = connection.cursor()
        sql = 'insert into `information`(`users`,`cod`,`name`,`age`,`mobile`) values (%s,%s,%s,%s,%s)'
        affect_row = cursor.executemany(sql, [('a123', '321321', '张三', 20, '110'),
                                              ('a198', '111111', '李四', 23, '119'),
                                              ('a456', '345876', '王五', 28, '120'),
                                              ('a654', '897123', '赵六', 17, '114'),
                                              ('a841', '816972', '小明', 65, '201'),
                                              ('a087', '102365', '小红', 23, '651'),
                                              ('a901', '904783', '小黄', 25, '913'),
                                              ('a798', '630595', '小青', 18, '012'),
                                              ('a307', '611335', '小紫', 23, '317')])
        print(f'受影响的行数{affect_row}')
        if affect_row > 0:
            print('添加成功')
        else:
            print('添加失败')
        DBUtil.close_all(self, connection, cursor)

    def update(self, users, cod):
        connection = DBUtil.get_connection(self)
        cursor = connection.cursor()
        sql = 'update information set name= %s,age=%s,mobile=%s where users =%s and cod=%s'
        affect_row = cursor.execute(sql, ('小刘', 80, 100100, users, cod))
        if affect_row > 0:
            print('修改成功')
        else:
            print('查无此人')
        DBUtil.close_all(self, connection, cursor)

    def delete(self, users, cod):
        connection = DBUtil.get_connection(self)
        cursor = connection.cursor()
        sql = 'delete from information where users =%s and cod=%s'
        affect_row = cursor.execute(sql, (users, cod))
        if affect_row > 0:
            print('删除成功')
        else:
            print('账号不存在,查无此人')
        DBUtil.close_all(self, connection, cursor)

    def select(self, currPageNo):
        connection = DBUtil.get_connection(self)
        cursor = connection.cursor()
        sql = 'select * from information limit %s,5'
        cursor.execute(sql, ((currPageNo - 1) * 5))
        row = cursor.fetchall()
        for item in row:
            print(item[0], item[1], item[2], item[3], item[4], item[5])
        DBUtil.close_all(self, connection, cursor)

test

from dao.a import Test

t = Test()
t.add_database()
while True:
    print('*******************************')
    print('【1】注册用户信息')
    print('【2】删除用户信息')
    print('【3】修改用户信息')
    print('【4】查询用户信息')
    print('【5】退出系统')
    print('*******************************')
    choice = int(input('请输入你要执行的命令'))

    if choice == 1:
        t.add()
        continue
    elif choice ==2:
        use = input('账号')
        pas = input('密码')
        t.delete(use,pas)
        continue
    elif choice ==3:
        use1 = input('账号')
        pas1 = input('密码')
        t.update(use1,pas1)
        continue
    elif choice ==4:
        page = int(input('请输入页数'))
        t.select(page)
        continue
    else:
        print('欢迎下次使用!')
        break

utils

import pymysql


class DBUtil:
    '''
    操作数据库的工具类
    '''

    def get_connection(self):
        '''
        创建connection对象
        :return: connection对象
        '''
        connection = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            password='root',
            db='testpython',
            charset='utf8mb4'
        )
        return connection

    def close_all(self,connection,cursor):
        '''
        关闭对象
        :param connection:数据库连接对象
        :param cursor: 游标对象
        :return: 无返回值
        '''
        # 5.提交更改
        connection.commit()
        # 6.关闭游标对象
        cursor.close()
        # 7.关闭连接对象
        connection.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值