文章目录
- 1 MySQL 指令
- 1.1 数据库管理(文件夹)
- 1.2 数据表管理(文件)
- 1.3 数据行操作
- 总结
- 2 案例:员工管理
- 2.1 创建表结构
- 2.2 Python 操作 MySQL
- 1. 创建数据
- 2. 查询数据
- 3. 删除
- 4. 修改
- 总结
- 3 案例: Flask + 前端 + MySQL
- 3.1 新增用户
- 3.2 查看用户
本文指令基于 MySQL 8.0 版本。
1 MySQL 指令
1.1 数据库管理(文件夹)
数据库 = 文件夹
数据表 = 文件
1. 查看已有的数据库
show databases;
2. 创建数据库
create database gx1217 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
3. 删除数据库
drop database 数据库名;
4. 进入数据库
use 数据库名;
5. 查看文件夹下所有的数据表
show tables;
1.2 数据表管理(文件)
1. 创建表格
create table 表名称(
列名称 类型,
列名称 类型,
列名称 类型,
)default charset=utf8;
eg:
(1)
create table tb1(
id int,
name varchar(16),
age int
)default charset=utf8;
(2)空值:
create table tb1(
id int,
name varchar(16) not null, -- 不允许为空
age int null, -- 允许为空(默认)
)default charset=utf8;
(3)默认值:
create table tb1(
id int,
name varchar(16),
age int default 3, -- 插入数据时,age如果没有传入值,默认为3
)default charset=utf8;
(4)主键一般用于表示当前行的数据编号(类似于身份证):
create table tb1(
id int primary key, -- 主键(不允许为空,不允许重复)
name varchar(16),
age int,
)default charset=utf8;
(5)一般情况下, 在创建表时会这么写:
create table tb1(
id int auto_increment primary key, -- 内部维护,自增
name varchar(16),
age int,
)default charset=utf8;
2. 删除表
drop table 表名称;
3. 查看表
desc 表名称;
4. 常用数据类型
-
tinyint
- 有符号,取值范围:-128 ~ 127(有正有负)【默认】;
create table tb1( id int, age tinyint, -- 有符号 )default charset=utf8;
- 无符号,取值范围:0 ~ 255 (只有正);
create table tb1( id int, age tinyint unsigned, -- 无符号 )default charset=utf8;
- 有符号,取值范围:-128 ~ 127(有正有负)【默认】;
-
int
-
有符号,取值范围:-2147483648 ~ 2147483647(有正有负)【默认】;
-
无符号,取值范围:0 ~ 4294967295(只有正);
-
-
bigint
-
有符号【默认】;
-
无符号;
-
-
float
-
double
-
decimal
准确的小数值, m 是数字总个数(负号不算), d 是小数点后个数, m 最大值为 65, d 最大值为 30 。salary decimal(8, 2)
-
char
定长字符串。mobile char(11) -- 固定用11个字符存储 -- 哪怕没有11个字符,也会用11个字符存储
-
varchar
变长字符串,真实数据有多长就按照多长存储。 -
text
text 数据类型用于保存变长的大字符串,最多可以用到 65535 ( 2 ** 16 - 1 ) 个字符。 -
mediumtext
-
longtext
-
datetime
YYYY-MM-DD HH:MM:SS (1000-01-01 00:00:00)
-
date
YYYY-MM-DD (1000-01-01)
1.3 数据行操作
1. 新增数据
insert into 表名(列名, 列名) values(值, 值);
insert into 表名(列名, 列名) values(值, 值), (值, 值);
2. 删除数据
delete from 表名;
delete from 表名 where 条件;
delete from db3;
delete from db3 where id=1;
3. 修改数据
update 表名 set 列=值;
update 表名 set 列=值, 列=值;
update 表名 set 列=值 where 条件;
4. 查询数据
select * from 表名称;
select 列名称, 列名称 from 表名称;
select 列名称, 列名称 from 表名称 where 条件;
总结
开发系统的时候,一般先通过 工具 + 命令 「创建数据集,创建数据表」 , 而表中的数据一按通过程序实现 增删改查。
2 案例:员工管理
-
使用 MySQL 内置工具(命令)
- 创建数据库 : unicom;
- 创建数据表 : admin;
id 整型,自增,主键; username 字符串,不为空; password 字符串,不为空; mobile 字符串 不为空;
-
Python 代码实现:
- 添加用户;
- 删除用户;
- 查看用户;
- 更新用户信息;
2.1 创建表结构
create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use unicom;
create table admin(
id int auto_increment primary key,
username varchar(64) not null,
password varchar(64) not null,
mobile varchar(11) not null
)default charset=utf8;
2.2 Python 操作 MySQL
pip install pymysql
1. 创建数据
(1)模板
import pymysql
# 1.连接 MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd="root", charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
# 千万不要用字符串格式去做sql的拼接,安全隐患sql注入
cursor.execute("insert into admin(username, password, mobile) values('rice', '123456', '15121254532')")
conn.commit()
# 3.关闭
conn.close()
(2)发送指令的其他格式
sql = "insert into admin(username, password, mobile) values(%s, %s, %s)"
cursor.execute(sql, ["candy", "123456", "12345678910"])
conn.commit()
sql = "insert into admin(username, password, mobile) values(%(n1)s, %(n2)s, %(n3)s)"
cursor.execute(sql, {"n1":"hair", "n2":"123456", "n3":"12345678910"})
2. 查询数据
(1)模板
import pymysql
# 1.连接 MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd="root", charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
# 千万不要用字符串格式去做sql的拼接,安全隐患sql注入
cursor.execute("select * from admin where id > 2")
# 列表里面套字典
data_list = cursor.fetchall()
for row_dict in data_list:
print(row_dict)
# 3.关闭
cursor.close()
conn.close()
(2)拼接的查询语句
cursor.execute("select * from admin where id > %s", [2, ])
(3)获取符合条件的第一条数据,返回字典
res = cursor.fetchone()
3. 删除
模板
import pymysql
# 1.连接 MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd="root", charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
cursor.execute("delete from admin where id = %s", [4, ])
conn.commit()
# 3.关闭
cursor.close()
conn.close()
4. 修改
模板
import pymysql
# 1.连接 MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd="root", charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
cursor.execute("update admin set mobile=%s where id=%s", ["15254829951", 2, ])
conn.commit()
# 3.关闭
cursor.close()
conn.close()
总结
- 在 新增、删除、修改 的时候,一定要执行
conn.commit()
,否则数据库中没有数据; - 在 查询 时,不需要
conn.commit()
,但是要执行fetchall()
或fetchone()
; - 对于 SQL 语句不要用 Python 的字符串格式化进行拼接,一定要用
execute()
。
3 案例: Flask + 前端 + MySQL
3.1 新增用户
from flask import Flask, render_template, request
import pymysql
app = Flask(__name__)
@app.route("/add/user", methods=["GET", "POST"])
def add_user():
if request.method == "GET":
return render_template("add_user.html")
username = request.form.get("user")
password = request.form.get("pwd")
mobile = request.form.get("mobile")
# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306,
user='root', passwd="root",
charset='utf8', db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.执行SQL
sql = "insert into admin(username, password, mobile) values(%s, %s, %s)"
cursor.execute(sql, [username, password, mobile])
conn.commit()
# 3.关闭连接
conn.close()
return "添加成功"
if __name__ == '__main__':
app.run()
add_user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>添加用户</h1>
<form method="POST" action="/add/user">
<input type="text" name="user" placeholder="用户名">
<input type="text" name="pwd" placeholder="密码">
<input type="text" name="mobile" placeholder="手机号">
<input type="submit" value="提 交">
</form>
</body>
</html>
3.2 查看用户
from flask import Flask, render_template, request
import pymysql
app = Flask(__name__)
@app.route("/show/user")
def show_user():
# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306,
user='root', passwd="root",
charset='utf8', db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.执行SQL
sql = "select * from admin"
cursor.execute(sql)
data_list = cursor.fetchall()
# 3.关闭连接
cursor.close()
conn.close()
print(data_list)
return render_template("show_user.html", data_list=data_list)
if __name__ == '__main__':
app.run()
show_user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>密码</th>
<th>手机号</th>
</tr>
</thead>
<tbody>
{% for item in data_list %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.username }}</td>
<td>{{ item.password }}</td>
<td>{{ item.mobile }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>