1.安装pymysql

pip install pymysql

2.pymysql操作数据库

  1. 连接数据库
    使用Connect方法连接数据库
pymysql.Connections.Connection(host=None, user=None, password='', database=None, port=0,  charset='')
参数说明:
    host – 数据库服务器所在的主机。
    user – 登录用户名。
    password – 登录用户密码。
    database – 连接的数据库。
    port – 数据库开放的端口。(默认: 3306)
    charset – 连接字符集。
返回值:
   返回连接对象
   
例子:
link = pymysql.Connect(host='localhost', port=3306, user='root', password='123456', db='zzl', charset='utf8')
  • 连接对象方法

方法

说明

begin()

开启事务

commit()

提交事务

cursor(cursor=None)

创建一个游标用来执行sql语句

rollback()

回滚事务

close()

关闭连接

select_db(db)

选择数据库

  1. 创建游标
cursor = link.cursor()
print(cursor.rowcount) #打印受影响行数

方法

说明

close()

关闭游标

execute(query, args=None)

执行单条语句,传入需要执行的语句,是string类型;同时可以给查询传入参数,参数可以是tuple、list或dict。执行完成后,会返回执行语句的影响行数。

fetchone()

取一条数据,没有数据为null,返回元组类型

fetchmany(n)

取n条数据 ,不传参返回一行数据

fetchall()

取所有数据 除表头,返回元组类型

  1. 执行sql语句
# 执行sql语句
sql = 'select * from user1'
# 执行完sql语句,返回受影响的行数
num = cursor.execute(sql)
  1. 获取结果集
result1 = cursor.fetchone()
print(result1)
  1. 关闭连接
cursor.close()
link.close()
  • 注意:
    写完代码后,需要将py文件添加可执行权限
sudo chmod +x conndb.py
./conndb.py

3. pymysql中事务处理

pymysql默认是没有开启自动提交事务,所以我们如果进行增、删、改,就必须手动提交或回滚事务。

sql = 'delete from user where id=%s' % user_id

# 如果要执行增删改语句的时候,下面的就是固定格式
try:
	cursor.execute(sql)
	# 如果全部执行成功,提交事务
	link.commit()
	print(cursor.lastrowid) #获取最后插入记录的自增id号
except Exception as e:
	print(e)
	link.rollback()
finally:
	cursor.close()
	link.close()

练习:

1.创建用户登录系统:

数据库操作包:

import pymysql


class MyDB:
    def __init__(self, host, user, password, db, port=3306):
        self.conn = None
        try:
            self.conn = pymysql.Connect(host=host, port=port, user=user, password=password, db=db)
            self.cursor = self.conn.cursor()
        except:
            print('连接数据库失败!')

    def update_data(self, sql):
        try:
            if self.conn:
                self.cursor.execute(sql)
                self.conn.commit()
                print('更新成功!')
            else:
                print('连接对象没有创建或者创建失败!')
        except Exception as err:
            print('更新有错了', err)

    def insert_data(self, sql):
        try:
            if self.conn:
                self.cursor.execute(sql)
                self.conn.commit()
                print('添加成功!')
            else:
                print('连接对象没有创建或者创建失败!')
        except Exception as err:
            print('添加有错了', err)

    def delete_data(self, sql):
        try:
            if self.conn:
                self.cursor.execute(sql)
                self.conn.commit()
                print('删除成功!')
            else:
                print('连接对象没有创建或者创建失败!')
        except Exception as err:
            print('删除有错了', err)

    def select_all(self, sql):
        try:
            if self.conn:
                self.cursor.execute(sql)
                rows = self.cursor.fetchall()
                return rows
            else:
                print('连接对象没有创建或者创建失败!')
        except Exception as err:
            print('查询所有 有错了', err)

    def select_one(self, sql):
        try:
            if self.conn:
                self.cursor.execute(sql)
                row = self.cursor.fetchone()
                return row   # 元组
            else:
                print('连接对象没有创建或者创建失败!')
        except Exception as err:
            print('查询单行数据有误', err)

    def close_conn(self):
        if self.conn:
            self.conn.close()

用户登录:

from dbtools import MyDB


# 注册
def register(db):
    username = input('用户名:\n')
    password = input('密码:\n')
    confirm_password = input('确认密码:\n')
    phone = input('手机号码:\n')
    if password == confirm_password:
        sql = "insert into user(username,password,phone) values('{}','{}','{}')".format(username, password, phone)
        db.insert_data(sql)
    else:
        print('两次密码不一致,重新输入')

def sousuo(db):
    username = input('用户名:\n')
    sql = "select * from user where username='{}'".format(username)
    a = db.select_one(sql)
    print(a)

# 登录
def login(db):
    username = input('用户名:\n')
    password = input('密码:\n')
    sql = "select * from user where username='{}' and password='{}'".format(username, password)
    user = db.select_one(sql)
    if user:
        print('登录成功!')
        return user
    else:
        print('用户名或者密码有误!')


def update_user(db):
    user = login(db)
    if user:  # user就是元组
        # 修改用户
        print('用户名:{},密码:{},手机号码:{}'.format(user[1], user[2], user[3]))
        username = input('用户名:\n')
        password = input('密码:\n')
        phone = input('手机号码:\n')
        # 更新
        sql = "update user set username='{}',password='{}',phone='{}' where id={}".format(username, password, phone,
                                                                                          user[0])
        db.update_data(sql)


def main():
    db = MyDB(host='localhost', user='test', password='test', db='mydb')
    while True:
        print('*' * 40)
        print('----------欢迎来到用户管理系统----------')
        print('*' * 40)
        choice = input('请选择功能:1.注册用户 2.用户登录 3.修改用户 4.删除用户 5.显示所有用户 6.搜索用户 7.退出系统 \n')
        if choice == '1':
            register(db)
        elif choice == '2':
            login(db)
        elif choice == '3':
            # 修改用户
            update_user(db)
        elif choice == '4':
            pass
        elif choice == '5':
            # 显示多有用户
            sql = 'select * from user'
            users = db.select_all(sql)
            print('用户名\t 手机号\t')
            for user in users:  # (1,’username‘,'password','xxxx')
                print(user[1], '\t', user[3])


        elif choice == '6':
            # 根据手机号码进行模糊检索
            sousuo(db)
        elif choice == '7':
            print('~~~~~~~欢迎下次再来~~~~~')
            break
        else:
            print('选择有误!')


if __name__ == '__main__':
    main()