说明
本套教程配有录播课,价格是188.99元,如果有需要,欢迎微信18010070052购买,配有完整的代码和相关资料以及文档。
说明:Docker部署MySQL8主要是简单快速,不会对电脑系统造成污染。假如你的本地没有Docker,或者你不会使用Docker,则使用phpstudy去启动MySQL,或者直接在本机安装MySQL都是可以的。最重要的是,你要有一个MySQL8的环境,并且你必须要知道数据库的主机地址,端口号,用户和密码等关键信息。
拉取镜像:
docker pull mysql:8.0.25
移除可能存在的镜像和容器:
docker stop mysql
docker rm mysql
创建一个新的容器:
--restart=always
:表示开机的时候,会自动重启-p 3306:3306
:表示宿主机的3306端口,绑定到容器的3306端口,进行了一次端口的转发--name mysql
:表示容器名叫mysql-e MYSQL_ROOT_PASSWOR=zhangdapeng520
:表示我们设置的root用户的密码是zhangdapeng520-d
:表示后台启动mysql:8.0.25
:表示MySQL的镜像以及版本# 示例
docker run --restart=always -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=zhangdapeng520 -d mysql:8.0.25
# 示例2
docker run --restart=always -p 3307:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=zhangdapeng520 -d mysql:8.0.25
参数解析:
创建数据库的名字叫做zdppy_mysqldemo
,这一步在其他的编程语言中,通常需要手动创建。但是我们的zdppy_mysql
很强大,支持直接通过Python编程语言去创建数据库。*
注意点:
Database的参数解析:
要实现添加数据库的功能,核心是调用db.add_database()
方法,括号里面传一个字符串,这个字符串表示的是要创建的数据库名字。需要注意的是,你的数据库名要符合命名规则,尽量不要包含特殊符号,否则可能会报错。
示例代码:
from mysql.db_object import Database
db = Database(
host="127.0.0.1",
port=3306,
database="",
username="root",
password="zhangdapeng520",
)
print(db.get_all_database())
# 添加数据库
db.add_database("zdppy_mysql_demo")
# 再次查看
print(db.get_all_database())
pip install zdppy_mysql-0.1.0.tar.gz
要查看所有数据库,我们只需要调用db.get_all_database
就可以了。这个方法,返回的是一个数组,这个数组里面的元素是字符串,每个字符串代表一个数据库的名字。*
示例代码:
from mysql.db_object import Database
db = Database(password="zhangdapeng520")
print(db.get_all_database())
要删除数据库,我们只需要调用db.delete_database(xxx)
就可以了,这里的xxx应该是一个字符串,代表的是要删除的数据库的名字。
示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 查看所有数据库
print("删除前:", db.get_all_database())
# 删除数据库
db.delete_database(database_name)
# 查看所有数据库
print("删除后:", db.get_all_database())
要实现查看所有的表格,我们只需要调用db.get_all_table()
就可以了。这个方法,返回的是一个数组,数组里面的元素是字符串,每个字符串元素代表的是表格的名称。
这个方法,和db.get_all_database()
很像,大家记忆的时候,可以联合起来一起记,记成db.get_all_xxx
就可以了。
一定要注意,在创建数据库的时候,我们没有指定数据库的名称,也就是database=""
。假如我们接下来想要操作表格,就一定要指定数据库,否则就会报错。所以,此时,我们应该给db
对象重新赋值。
示例代码;
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 查看所有的表格
print(db.get_all_table())
# 删除数据库
db.delete_database(database_name)
要创建表格,我们必须要自己准备好一个建表的SQL语句。然后调用db.execute(sql)
去执行建表的SQL语句,以达到创建表格的目的。
比如,我们创建一个简单的用户表,SQL语句如下:
create table user(id int primary key auto_increment, name varchar(36))
示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 查看所有的表格
print(db.get_all_table())
# 删除数据库
db.delete_database(database_name)
强制添加数据库,指的是如果数据库存在,先删除该数据库,然后再创建该数据库,是一种非常危险的操作,适合用于想要初始化某个数据库的时候。
假想一个场景:
示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table if not exists user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 此时,再创建该数据库,查看所有表,该表应该还在,因为数据库存在的时候,再添加数据库不会受到影响
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
db.add_database(database_name)
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
print(db.get_all_table())
# 但是,我们强制添加该数据库,再查看所有表,该表应该已经消失,因为该数据库被删除了一次,库里面所有的数据都没了
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
db.add_database_force(database_name)
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
print(db.get_all_table())
# 删除数据库
db.delete_database(database_name)
要实现添加数据,我们只需要调用db.add(表名,[要新增的字段], [每个字段对应的值])
就可以了。
示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 添加数据
table = "user"
columns = ["name"]
values = ["张三"]
db.add(table, columns, values)
# 删除数据库
db.delete_database(database_name)
要获取所有的数据,我们只需要执行db.get_all(表格名)
就可以了。返回值是一个列表,列表中的元素是字典,每个字典包含了一条数据,key是列名,value是列名对应的值。
示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 添加数据
table = "user"
columns = ["name"]
values = ["张三"]
db.add(table, columns, values)
# 查看所有数据
data = db.get_all(table)
print(data, type(data))
# 获取每一个值
for u in data:
print(u.get("id"), u.get("name"))
# 删除数据库
db.delete_database(database_name)
要实现批量添加数据,实际上也很简单。我们只需要调用db.add_many(表格名,[列名], [[每一列的值],...])
。
批量添加用户的核心代码如下:
table = "user"
columns = ["name"]
values = [["张三"], ["李四"], ["王五"]]
db.add_many(table, columns, values)
完整示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 批量添加数据
table = "user"
columns = ["name"]
values = [["张三"], ["李四"], ["王五"]]
db.add_many(table, columns, values)
# 查看所有数据
data = db.get_all(table)
print(data)
# 删除数据库
db.delete_database(database_name)
更新数据,实际上也特别简单。我们只需要调用db.update(表格, id, [列名], [值])
方法就可以了。
修改用户数据的核心代码如下:
db.update(table, 1, columns, ["张三333"])
完整示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 批量添加数据
table = "user"
columns = ["name"]
values = [["张三"], ["李四"], ["王五"]]
db.add_many(table, columns, values)
# 修改张三 张三333
db.update(table, 1, columns, ["张三333"])
# 查看所有数据
data = db.get_all(table)
print(data)
# 删除数据库
db.delete_database(database_name)
要实现删除数据库,我们只需要调用db.delete(表格,id)
就可以了。
删除一个用户的核心代码如下:
db.delete(table, 1)
完整示例代码如下:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 批量添加数据
table = "user"
columns = ["name"]
values = [["张三"], ["李四"], ["王五"]]
db.add_many(table, columns, values)
# 删除张三
db.delete(table, 1)
# 查看所有数据
data = db.get_all(table)
print(data)
# 删除数据库
db.delete_database(database_name)
要根据ID查询数据,我们只需要调用db.get_by_id(表格,id)
就可以了。返回值是一个字典,字典的key是列名,值是列名对应的值。
根据ID查询用户的核心代码如下:
zs = db.get_by_id(table, 1)
print(zs)
完整示例代码如下:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 批量添加数据
table = "user"
columns = ["name"]
values = [["张三"], ["李四"], ["王五"]]
db.add_many(table, columns, values)
# 获取
zs = db.get_by_id(table, 1)
print(zs)
# 查看所有数据
data = db.get_all(table)
print(data)
# 删除数据库
db.delete_database(database_name)
要根据ID列表查询数据,实际上也特别的简单,我们只需要调用db.get_by_ids(表格, [id列表])
。返回值是一个列表,列表中的元素是字典,字典的key是列名,值是列名对应的值。
根据id列表查询用户的核心代码如下:
users = db.get_by_ids(table, [1, 2, 33])
print(users)
完整示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 批量添加数据
table = "user"
columns = ["name"]
values = [["张三"], ["李四"], ["王五"]]
db.add_many(table, columns, values)
# 获取
users = db.get_by_ids(table, [1, 2, 33])
print(users)
# 查看所有数据
data = db.get_all(table)
print(data)
# 删除数据库
db.delete_database(database_name)
这是一个非常有特色的方法,但是也经常用到。表格中有一列数据叫做name,这个name有很多条数据,但是我只想查询出不重复的名字,该怎么办呢?
其实特别的简单,我们只需要调用db.get_all_distinct(表格,列名)
就行了。返回值是一个列表,列表的元素是该列名对应的不重复的值。
核心代码如下:
names = db.get_all_distinct(table, "name")
print(names)
完整示例代码:
from mysql.db_object import Database
# 创建数据库对象
database_name = "test"
db = Database(
host="localhost",
port=3307,
database="",
username="root",
password="zhangdapeng520"
)
# 创建数据库
db.add_database(database_name)
# 给db重新赋值
db = Database(
host="localhost",
port=3307,
database=database_name,
username="root",
password="zhangdapeng520"
)
# 创建表格
sql_str = "create table user(id int primary key auto_increment, name varchar(36))"
db.execute(sql_str)
# 批量添加数据
table = "user"
columns = ["name"]
values = [["张三"], ["李四"], ["王五"], ["张三"], ["王五"], ["王五"], ["赵六"]]
db.add_many(table, columns, values)
# 查看所有数据
data = db.get_all(table)
print(data)
# 获取名字并去重
names = db.get_all_distinct(table, "name")
print(names)
# 删除数据库
db.delete_database(database_name)
使用mysql.connect(主机地址,用户名,密码,数据库,端口号)
获取MySQL连接对象。接着使用with db.cursor() as cur
获取一个游标对象,通过这个游标对象,调用db.execute
执行SQL语句。如果要查询,则需要跟cur.fetchxxx
进行配合使用。
新增用户的核心代码如下:
cur.execute("insert into user(name) values(%s)", ("张三",))
根据ID查询用户的的核心代码如下:
cur.execute("select * from user where id=%s", (1,))
print(cur.fetchone())
根据ID修改用户的核心代码如下:
cur.execute("update user set name=%s where id=%s", ("张三三", 1))
根据ID去删除用户的核心代码如下:
cur.execute("delete from user where id=%s", (1,))
查询所有数据的核心代码如下:
cur.execute("select * from user")
print(cur.fetchall())
完整示例代码:
import mysql
# 连接数据库
db = mysql.connect(
"localhost",
"root",
"zhangdapeng520",
"zdppy_mysql_demo",
3306,
)
# 使用游标对象执行SQL语句
with db.cursor() as cur:
# 创建表格
cur.execute("create table user(id int primary key auto_increment, name varchar(36))")
# 新增数据
cur.execute("insert into user(name) values(%s)", ("张三",))
cur.execute("insert into user(name) values(%s)", ("李四",))
cur.execute("insert into user(name) values(%s)", ("王五",))
# 查询所有数据
cur.execute("select * from user")
print(cur.fetchall())
# 根据id查询数据
cur.execute("select * from user where id=%s", (1,))
print(cur.fetchone())
# 根据id修改数据
cur.execute("update user set name=%s where id=%s", ("张三三", 1))
cur.execute("select * from user")
print(cur.fetchall())
# 根据id删除数据
cur.execute("delete from user where id=%s", (1,))
cur.execute("select * from user")
print(cur.fetchall())
# 删除表格
cur.execute("drop table if exists user")
有一个连接,这个连接每1秒中执行一次SQL语句,不希望这个连接被重复创建。
完整示例代码:
import time
import mysql
db = mysql.connect(
"localhost",
"root",
"zhangdapeng520",
"test",
3307,
)
with db.cursor() as cur:
cur.execute("create table user(id int primary key auto_increment, name varchar(36))")
count = 0
max_count = 10
while count <= max_count:
cur.execute("insert into user(name) values(%s)", (f"张三{count}",))
count += 1
time.sleep(1)
# 查询所有数据
cur.execute("select * from user")
print(cur.fetchall())
cur.execute("drop table if exists user")