文章目录
- 一. 知识链接
- **优秀的读者会给优秀的文章进行点赞的_.._**
- 二. 数据库的核心命令
- 2.1 安装数据库
- a.docker安装
- b. win10安装
- c. Ubuntu安装
- d. 更换mysql文件存储位置
- 2.2 用户 增删改查
- 2.3 数据库 增删改查
- 2.4 表 增查改删
- 2.5 导出导入数据库和数据表
- 三、Python-mysql
- 3.1 安装插件包
- 3.2 python与mysql建立连接
- 3.3 python操作数据库
- 3.4 python操作数据表
- 3.5 正则表达式
- 四. MySQL具体应用
- 4.1 设置每天自动备份mysql数据库
- 4.2 修改服务器上面MySQL整个列的数据
一. 知识链接
mysql基础语句一千行mysql学习笔记
全部知识点跳转
优秀的读者会给优秀的文章进行点赞的_…_
二. 数据库的核心命令
2.1 安装数据库
a.docker安装
docker安装和docker win10下mysql安装教程
在win10上面安装完毕docker后
docker pull mysql:5.7
# 得到mysql镜像
加载为容器, 这里相当于创建了一个mysql服务器
然后在Ubuntu子系统上面安装mysql客户端
sudo apt install mysql-client
此时可以通过远程访问mysql进行访问本地docker里面的mysql
mysql -h 主机IP -u root -p 密码
b. win10安装
点击进入win10安装教程
c. Ubuntu安装
点击进入Ubuntu安装教程
d. 更换mysql文件存储位置
# 修改文件存储路径为这个/home/nisl/system/mysql_data
sudo cp -ar /var/lib/mysql/* /home/nisl/system/mysql_data/
# 修改配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# datadir = /var/lib/mysql/
datadir = /home/nisl/system/mysql_data
# 安全保护
sudo vi /etc/apparmor.d/usr.sbin.mysqld
# Allow data dir access
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
# 修改成 -----------------------------
# Allow data dir access
# /var/lib/mysql/ r,
/home/nisl/system/ r,
# /var/lib/mysql/** rwk,
/home/nisl/system/** rwk,
# 访问控制
sudo vim /etc/apparmor.d/abstractions/mysql
#/var/lib/mysql{,d}/mysql{,d}.sock rw,
/home/nisl/system/mysql_data{,d}/mysql{,d}.sock rw,
# 重启服务
sudo service apparmor restart
sudo service mysql start
2.2 用户 增删改查
增加删除用户zhao,并修改权限,名称和密码
mysql> select user,host from mysql.user# 显示用户
mysql -u root -p # 登陆root用户
#开始创建用户zhao.by后面是密码 返回Query OK
mysql> create user zhao@localhost identified by 'zhao';
mysql> flush privileges;# 刷新
mysql> quit #退出
mysql -u zhao -p # 登陆新建用户
# 删除用户,在root用户下
mysql> drop user "gerrit"@"localhost" #删除用户gerrit
# 用户权限修改
root用户权限最高,拥有所有权限,首先在root用户下创建zhao,在修改zhao的权限
# 创建用户zhao,但是此时zhao权限为最低
mysql> create user zhao@localhost identified by 'zhao';
授权格式:grant privileges on databasename.tablename to 'username'@'host' IDENTIFIED BY 'PASSWORD';
# all privileges是所有权限
mysql> grant all privileges on `zhao`.* to 'zhao'@'localhost';
mysql> grant select on zhao.* to 'zhao'@'localhost'; /*给予查询权限*/
mysql> grant insert on zhao.* to 'zhao'@'localhost'; /*添加插入权限*/
mysql> grant delete on zhao.* to 'zhao'@'localhost'; /*添加删除权限*/
mysql> grant update on zhao.* to 'zhao'@'localhost'; /*添加权限*/
mysql> flush privileges; /*刷新权限*/
mysql> show grants; #查看当前用户权限
mysql> show grants for 'zhao'@'localhost'; # 查看zhao的权限
mysql> revoke delete on zhao.* from 'zhao'@'localhost'; # 删除权限
#更改用户名字
mysql> rename user 'zhao'@'localhost' to 'zjq'@'localhost';
# 修改用户密码
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
mysqladmin -uroot -p123456 password 1234abcd
格式:mysqladmin -u用户名 -p旧密码 password 新密码
2.3 数据库 增删改查
创建删除数据库,给新用户授权数据库权限
转自博客
mysql -u root -p # 登录用户
mysql> create database testDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # 创建数据库testDB
mysql> show databases # 显示数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| runoob |
| runoob_db |
| sys |
| testdb |
+--------------------+
# 授权用户zhao对testDB数据库的所有管理权限
mysql> grant all privileges on testDB.* to 'zhao'@'localhost';
# 数据库创建和删除
mysqladmin -u root -p create RUNOOB# 使用root用户创建RUNOOB数据库
mysql> create DATABASE RUNOOB;
mysqladmin -u root -p drop RUNOOB
mysql> drop database RUNOOB;
# 选择数据库
use mysql
mysql> show variables like 'character_set_database'; # 显示当前数据库中的字符集
mysql> alter database submission character set 'utf8'; # 修改数据库的字符集为utf8
2.4 表 增查改删
create table t1(age int, name varchar(10)) default charset=utf8; # 创建表
insert into t1(age,name) values(10,"丁丁"),(11,"泥泞"); # 插入数据
alter table t1 add column addr varchar(50); # 给上表增加列
drop table t1; # 删除表
select * from t1; # 显示数据表的全部内容
select age,name from t1; # 显示数据表的全部年龄和姓名
desc t1; # 显示数据表的表头和数据类型
update t1 set age=12 where name="丁丁"; # 修改name为丁丁的年龄
delete from t1 where name="丁丁"; # 删除name为丁丁的行
# Cannot delete or update a parent row: a foreign key constraint fails
SET foreign_key_checks = 0; // 先设置外键约束检查关闭
delete from t1 where name="丁丁"; // 删除数据,表或者视图
SET foreign_key_checks = 1; // 开启外键约束检查,以保持表结构完整性
alter table t1 convert to character set utf8; # 设置News_news这张表为utf-8的格式
FLUSH PRIVILEGES;
# 创建两张表
create table boy(name varchar(10), age int, addr varchar(50));
create table girl(name varchar(10), age int, addr varchar(50));
# 插入并显示数据
insert into boy(name, age, addr)
values
("张飞",32,"北京"),
("谢霆锋",30,"南京"),
("李四",25,"天井"),
("甲流",33,"酒精"),
("鲁北",24,"南海");
select * from boy;
insert into girl(name, age, addr)
values
("泻立停",32,"北京"),
("佳美",30,"府东"),
("盼盼",23,"背黑锅"),
("欣欣",34,"安防"),
("玲玲",24,"安慰人");
select * from boy;
select * from girl;
select distinct age from boy; # 去重查询
# 查询age在25-30之间的
insert into boy values("彪子",28,"韩国");
insert into boy values("鬼小四",26,"几盆");
select * from boy where age between 25 and 30;
# 查询age 25和30的数据 固定范围
select * from boy where age in (25,30);
# 查询name中, 有四的列出来, %通配符,
select * from boy where name like "%四%";
select * from boy where name like "%四";
select * from boy where name like "彪%";
# 排序输出
select * from boy order by age;
# 降序
select * from boy order by age desc;
# 显示前两个
select * from boy limit 2;
# 查看表中字段
desc t1;
# 统计age数量, age,count(1)是表头
insert into boy values("王八那",26,"as");
insert into boy values("阿斯钢",26, "阿三哥");
select
age,count(1)
from boy
group by age;
# 多表查询
# 内连接 as后面跟的是查询出来的表头, on 后面是查询的条件
# 两张表的交集
select
a.`name` as "男名字", b.`name`as "女名字"
from
d1.boy a
inner join d1.girl b on a.age=b.age;
# 左连接, 以左边的a.age查询为主,
# 这里就不得不说下我们玩的DNF了, 创建一个账号,但是里面有很多角色,
# 左表为基础, 右表有就好了
insert into girl values("阿美美",32, "阿哥");
insert into girl values("慧海",24, "笔记");
select
a.`name` as "男名字",a.age as "男年龄", b.`name`as "女名字", b.age as "女年龄"
from
d1.boy a
left join d1.girl b on a.age=b.age;
# 右连接
insert into girl values("阿美美",32, "阿哥");
insert into girl values("慧海",24, "笔记");
select
a.`name` as "男名字",a.age as "男年龄", b.`name`as "女名字", b.age as "女年龄"
from
d1.boy a
right join d1.girl b on a.age=b.age;
# 系统函数
# 聚合函数
# 求表的sum, max min avg
select
sum(age), max(age),min(age),avg(age)
from boy;
# 字符串汇合
select
name, CONCAT("角色名",name,age,addr) as concat
from boy;
-- 将name字段的四换成一
select
name, replace(name,'四', '一')
from boy;
# 日期函数
select
now();
# 加两天
select
DATE_ADD("2019-1-26",interval 2 DAY);
select
DATE_SUB("2019-1-26",interval 2 DAY);
2.5 导出导入数据库和数据表
# 数据库导出
# mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
mysqldump -u root -p mydatabase > save.sql
# 导出表
#mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名.sql
mysqldump -u root -p mydatabase t1> mydatabase_t1.sql
# 导入数据库
# mysql -u用户名 -p密码 数据库名 < 数据库名.sql
# 第二种方法, 先常见数据库,然后在导入 source 数据库名.sql
# 导入表
# mysql -u用户名 -p密码 -d 数据库名 表名 < 导出的文件名.sql
转自博客
三、Python-mysql
3.1 安装插件包
python -m pip install mysql-connector -i https://pypi.mirrors.ustc.edu.cn/simple/
3.2 python与mysql建立连接
import mysql.connector
mydb = mysql.connector.connect(
host="localhost", # 数据库主机地址
user="root", # 数据库用户名
passwd="yourpassword" # 数据库密码
)
print(mydb)
问题1 ‘calling_sha2_password’ is not supported.
解决方式 摘自菜鸟教程
- 修改myini
[client]
# 设置mysql客户端默认字符集
# 修改为utf8mb4
# default-character-set=utf8
default-character-set=utf8mb4
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录 D:\\ProgramFiles
basedir=D:\\ProgramFiles\\mysql-8.0.17-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\\ProgramFiles\\mysql-8.0.17-winx64
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
# character-set-server=utf8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
- 修改密码格式
# 修改加密规则为永不过期
#注意:password 改为你的密码,别老老实实照抄,之前本人便以为 password 指代密码不用改变,结果一通指令下去,mysql 登不上了,只好重新初始化数据库
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
#更新一下用户的密码加密方式为之前版本的方式
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
#刷新权限
mysql> FLUSH PRIVILEGES;
- 重启,这是再看,已经修改了身份验证插件。
import mysql.connector
mydb=mysql.connector.connect(
host="localhost",
user="root",
passwd="123456",
# auth_plugin='mysql_native_password'
)
print(mydb)
输出: <mysql.connector.connection.MySQLConnection object at 0x00000211F73DB9E8>
3.3 python操作数据库
# 创建数据库
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
# database="runoob_db" # 也可以直接打开用户下数据库
)
mycursor = mydb.cursor() # 创建游标
print("当前用户下的数据库包含如下:")
mycursor.execute("SHOW DATABASES")
for x in mycursor:print(x)
try:
mycursor.execute("CREATE DATABASE runoob_db") # 创建名为runoob_db的数据库
print("创建数据库runoob_db")
mycursor.execute("SHOW DATABASES")
for x in mycursor:print(x)
except Exception as e:
print("数据库已经存在runoob_db")
print(e)
# 删除数据库
# mycursor.execute("drop DATABASE runoob_db")
当前用户下的数据库包含如下:
('information_schema',)
('mysql',)
('performance_schema',)
('sys',)
创建数据库runoob_db
('information_schema',)
('mysql',)
('performance_schema',)
('runoob_db',)
('sys',)
3.4 python操作数据表
# 创建数据表
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 第一种方式,先建表,在添加主键值
try:
# 创建表 sites,字段为 name 和 url
mycursor.execute("CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))")
print("创建表,并增加主键 id")
mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")
mycursor.execute("SHOW TABLES")
for x in mycursor:print(x)
except Exception as e:
print(e)
# 给sites添加主键
mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")
mycursor.execute("SHOW TABLES")
for x in mycursor:print(x)
# 第二种方式,直接建表,包括主键值和两个参数
# mycursor.execute("CREATE TABLE sites2 (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
# 删除数据表 sites)
mycursor.execute("DROP TABLE IF EXISTS sites")
- 表的插入,创建
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 第一种方法 插入一条数据
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = ("RUNOOB", "https://www.runoob.com")
mycursor.execute(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount == 1, "记录插入成功。")
print("1 条记录已插入, ID:", mycursor.lastrowid)
# 第二种方法 插入批量数据
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = [
('Google', 'https://www.google.com'),
('Github', 'https://www.github.com'),
('Taobao', 'https://www.taobao.com'),
('stackoverflow', 'https://www.stackoverflow.com/')
]
mycursor.executemany(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount, "记录插入成功。")
- 表的查询
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 新建table删除table
# mycursor.execute("DROP TABLE IF EXISTS sites2")
# mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
''' # 插入部分
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = ("RUNOOB", "https://www.runoob.com")
mycursor.execute(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount == 1, "记录插入成功。")
print("1 条记录已插入, ID:", mycursor.lastrowid)
# 第二种方法 插入批量数据
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = [
('Google', 'https://www.google.com'),
('Github', 'https://www.github.com'),
('Taobao', 'https://www.taobao.com'),
('stackoverflow', 'https://www.stackoverflow.com/')
]
mycursor.executemany(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount, "记录插入成功。")
'''
# 第一种查询方法
mycursor.execute("SELECT * FROM sites")
myresult = mycursor.fetchall() # fetchall() 获取所有记录
for x in myresult:print(x)
# 第二种 读取特定字段
print("读取特定字段")
mycursor.execute("SELECT name, url FROM sites")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 第三种 如果我们要读取指定条件的数据,可以使用 where 语句:
print("name = RUNOOB关键字的")
mycursor.execute("SELECT * FROM sites WHERE name ='RUNOOB'")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 第四种 指定函数 不能放到查询的前面,不知道为啥
# print("读取特定字段 第一个")
# mycursor.execute("SELECT * FROM sites")
# myresult = mycursor.fetchone()
# print(myresult)
# 第五种 通配符%xx%
print("读取特定字段 url中包含oo的")
mycursor.execute("SELECT * FROM sites where url like '%oo%'")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 第五种加一 为了防止数据库查询发生 SQL 注入的,我们可以使用 %s 占位符来转义查询的条件:
print("使用%s占位")
sql = "SELECT * FROM sites WHERE name = %s"
na = ("RUNOOB", )
mycursor.execute(sql, na)
myresult = mycursor.fetchall()
for x in myresult:print(x)
print("id = 2")
mycursor.execute("SELECT * FROM sites where id like 2")
myresult = mycursor.fetchall()
for x in myresult:print(x)
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
读取特定字段
('RUNOOB', 'https://www.runoob.com')
('Google', 'https://www.google.com')
('Github', 'https://www.github.com')
('Taobao', 'https://www.taobao.com')
('stackoverflow', 'https://www.stackoverflow.com/')
name = RUNOOB关键字的
(1, 'RUNOOB', 'https://www.runoob.com')
读取特定字段 url中包含oo的
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
使用%s占位
(1, 'RUNOOB', 'https://www.runoob.com')
id = 2
(2, 'Google', 'https://www.google.com')
- 表的排序
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 新建table删除table
# mycursor.execute("DROP TABLE IF EXISTS sites2")
# mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
''' # 插入部分
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = ("RUNOOB", "https://www.runoob.com")
mycursor.execute(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount == 1, "记录插入成功。")
print("1 条记录已插入, ID:", mycursor.lastrowid)
# 第二种方法 插入批量数据
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = [
('Google', 'https://www.google.com'),
('Github', 'https://www.github.com'),
('Taobao', 'https://www.taobao.com'),
('stackoverflow', 'https://www.stackoverflow.com/')
]
mycursor.executemany(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount, "记录插入成功。")
'''
# 查询结构排序,仅仅是输出的时候进行了排序,不改变源表
# 使用 ORDER BY 语句,默认的排序方式为升序,关键字为 ASC,如果要设置降序排序,可以设置关键字 DESC
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
# # 对name排序
print("对name升序排序")
mycursor.execute("SELECT * FROM sites ORDER BY name")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# # 对url排序 降序
print("对url排序 降序")
mycursor.execute("SELECT * FROM sites ORDER BY url desc")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 设置查询数量 "LIMIT" 语句来指定
print("LIMIT 设置查询数量")
mycursor.execute("SELECT * FROM sites LIMIT 3")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 也可以指定起始位置,使用的关键字是 OFFSET:
print("LIMIT 设置查询数量,指定起始位置")
mycursor.execute("SELECT * FROM sites LIMIT 3 OFFSET 1")
myresult = mycursor.fetchall()
for x in myresult:print(x)
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
对name升序排序
(3, 'Github', 'https://www.github.com')
(2, 'Google', 'https://www.google.com')
(1, 'RUNOOB', 'https://www.runoob.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(4, 'Taobao', 'https://www.taobao.com')
对url排序 降序
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
LIMIT 设置查询数量
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
LIMIT 设置查询数量,指定起始位置
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
- 删除数据mycursor.execute(“DELETE from sites where name = ‘Google’”)
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 新建table删除table
# mycursor.execute("DROP TABLE IF EXISTS sites2")
# mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
''' # 插入部分
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = ("RUNOOB", "https://www.runoob.com")
mycursor.execute(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount == 1, "记录插入成功。")
print("1 条记录已插入, ID:", mycursor.lastrowid)
# 第二种方法 插入批量数据
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = [
('Google', 'https://www.google.com'),
('Github', 'https://www.github.com'),
('Taobao', 'https://www.taobao.com'),
('stackoverflow', 'https://www.stackoverflow.com/')
]
mycursor.executemany(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount, "记录插入成功。")
'''
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
# 删除记录使用 "DELETE FROM" 语句:,
# 注意一定要指定where,不然整表删除
# mycursor.execute("DELETE from sites where name = 'Google'")
# 为了防止SQL注入击,使用%s占位符转义删除语句条件
sql = "DELETE FROM sites WHERE name = %s"
na = ("Google", )
mycursor.execute(sql, na) # 与上一个一致
mydb.commit()
print(mycursor.rowcount, " 条记录删除")
# print("删除后")
# mycursor.execute("SELECT * from sites")
# for i in mycursor.fetchall():print(i)
(1, 'RUNOOB', 'https://www.runoob.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
- 更新表数据 mycursor.execute(“UPDATE sites SET name = ‘guge’ WHERE name = ‘Google’”)
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 注意一定要确定where条件语句,不然整个表格都会改变
print("当前表中数据")
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
mycursor.execute("UPDATE sites SET name = 'guge' WHERE name = 'Google'")
mydb.commit() # 只要是修改表,这条命令就要用到
print(mycursor.rowcount, " 条记录被修改")
print("修改后的,将Google修改为guge表中数据")
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
mycursor.execute("UPDATE sites SET name = 'Google' WHERE name = 'guge'")
mydb.commit() # 只要是修改表,这条命令就要用到
print(mycursor.rowcount, " 条记录被修改")
print("修改回来的")
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
当前表中数据
(1, 'RUNOOB', 'https://www.runoob.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(6, 'Google', 'https://www.google.com')
1 条记录被修改
修改后的,将Google修改为guge表中数据
(1, 'RUNOOB', 'https://www.runoob.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(6, 'guge', 'https://www.google.com')
1 条记录被修改
修改回来的
(1, 'RUNOOB', 'https://www.runoob.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(6, 'Google', 'https://www.google.com')
3.5 正则表达式
mycursor.execute("select name from employee_tbl where name regexp '^小'") # 所有字段中以小开头的
for res in mycursor.fetchall(): print(res)
mycursor.execute("select * from employee_tbl where name regexp '明$'") # 所有字段中以明为结尾的
for res in mycursor.fetchall(): print(res)
mycursor.execute("select * from employee_tbl where name regexp '丽'") # 所有字段中含有丽的
for res in mycursor.fetchall(): print(res)
mycursor.execute("select * from employee_tbl where name regexp '^[aeiou]|ok$'") # 所有字段中以aeiou开头的,或者以ok结尾的
for res in mycursor.fetchall(): print(res)
四. MySQL具体应用
4.1 设置每天自动备份mysql数据库
04 16 * * * cd /home/nisl/ && ./save_mysql.py /mnt/e/mysql_save/
配置定时任务见7.32节
#!/usr/bin/env python3
# save_mysql.py
import os,sys
import time
# 功能: 运行脚本能够自动保存mysql数据库的内容, 并进行压缩, 按照时间进行保存
# 参数: 运行时传入的第一个参数是需要保存到的路径文件夹
save_path = sys.argv[1]
if not os.path.exists(save_path):
os.makedirs(save_path)
'''
mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
'''
db_host="主机ip地址"
db_user="用户"
db_passwd="密码"
db_name="数据库名称"
db_charset="utf8"
db_backup_name=os.path.join(save_path, r"dailyreport-%s.sql" % (time.strftime("%Y-%m-%d-%H-%M")))
if __name__ == "__main__":
print(f"begin to dump mysql database crm...save to {db_backup_name}");
# 其实主要就是执行下面这句话, 如果是本地的mysql, 可以去掉-h{db_host}
os.system(f"mysqldump -h{db_host} -u{db_user} -p{db_passwd} {db_name} \
--default_character-set={db_charset} > {db_backup_name} && gzip {db_backup_name}")
4.2 修改服务器上面MySQL整个列的数据
功能:
将整个数据库中file_path字段里面的~/system
改成/home/nisl/syste
pip install mysql-connector # 安装
import mysql.connector
mydb = mysql.connector.connect(
host="ip",
user="user",
passwd="passwd",
)
mycursor = mydb.cursor()
mycursor.execute("use 数据库")
# 第二种 读取特定字段
print("读取特定字段")
mycursor.execute("SELECT * FROM file")
myresult = mycursor.fetchall()
for i, x in enumerate(myresult):
path = x[6].replace("~/system", "/home/nisl/system") # /home/nisl/system
mycursor.execute(f"UPDATE file SET file_path = '{path}' WHERE file_path = '{x[6]}'")
print(mycursor.rowcount, " 条记录被修改")
mydb.commit()