数据库--DCL操作和pymysql

144 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天

DCL(数据控制语言)

创建一个新用户

create user '用户名' @ 'ip地址(%可以表示任意地址,localhost表示本机)' identified by '密码';

授权

#把hrs底下的所有权限对用户开放
grant all privileges on hrs.* to '用户名' @ 'ip地址';

召回权限

# 召回insert,delete,update权限
revoke insert,delete,update from '用户名' @ 'ip地址';

事务(transaction)

把多个增删改的操作做成一个不可分割的原子性操作(要么全部都做,要么全都不做)

-- 开启事务(开启事务环境)
begin;(start transaction;)
-- 提交(事务中的所有操作全部生效)
commit;
-- 回滚(在事务还没有生效时将事务中的操作全部撤销)
rollback;

python下的数据库

安装第三方库

pip install pymysql==版本号
# 查看虚拟环境的库的清单(库的名称和版本)
pip freeze
#输出环境需求(重定项)
pip freeze > requirements.txt
#一键安装环境依赖项
pip install -r requirements.txt

通过python连接数据库

  • 首先建一个连接,然后建一个客户端通过客户端把命令发给数据库去执行
import pymysql
def add():
    conn = pymysql.connect(host='主机IP地址',port=3306,user='',password='',db='数据库名称',charset='utf8')
    try:
    	#上下文语法
    	with conn.cursor() as cursor:
            #执行SQL语句
        	result = cursor.execute(
            	'insert into tb_dept values(90,'销售2','重庆')')
            if result = 1:
       			print('添加成功')
        	#因为默认是事务模式所以我们得手动提交
        	conn.commit()
	except pymysql.MySQLError as error:
        print(error)
        #回滚操作
        conn.rollback
    finally:
        #关闭连接,释放资源
        conn.close()
def delete():
    no = int(input('要删除部门的编号:'))
    conn = pymysql.connect(host='主机IP地址',port=3306,user='',password='',db='数据库名称',charset='utf8')
    try:
    	#上下文语法
    	with conn.cursor() as cursor:
            #执行SQL语句
        	result = cursor.execute(
            	'delete from tb_dept where dno=%s',(no,)) 
            if result = 1:
       			print('删除成功')
        	#因为默认是事务模式所以我们得手动提交
        	conn.commit()
	except pymysql.MySQLError as error:
        print(error)
        #回滚操作
        conn.rollback
    finally:
        #关闭连接,释放资源
        conn.close()
  • 错误总结
  1. 由于ip地址的错误导致连不上!

image-20220613202330264.png

  1. 由于端口错误导致的报错!

image-20220613202551779.png

  1. 用户名或者密码写错报错!

image-20220613202649577.png 4. 数据库的名字写错!

image-20220613202728465.png 5. 编码写错!

image-20220613202806657.png

  • 删除和更新传参要的都是元组类型