Step 1:MySQL 安装
所用的系统为 Windows 10
进入 installer 下载界面,选择 Windows(x86, 32-bit), MSI Installer
下载完成后点击开始安装(详细配置自行选择,一般直接 next 就可以了)
可能会遇到提示,缺少 Microsoft Visual C++ 2019 Redistributable Package (x64) 这个文件
安装完成后打开 MySQL 8.0 Command Line Client,输入安装过程中自定义的密码即可
Step 2:数据库驱动 PyMySQL
- 如果使用
python2.x
安装 mysql-python
驱动,直接在虚拟环境下 pip
如果报错,则 点此下载
打开 cmd
,开启虚拟环境并切换至下载路径
输入: pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl
这里操作系统为windows10 64位,若为32位则可下载 win32 的文件
- 如果使用
python3.x
安装 PyMySQL
驱动,打开 cmd
并开启虚拟环境,直接 pip install PyMySQL
关于
mysql-python
与PyMySQL
mysql-python
不支持flask 2.0
,python2.x
应当安装mysql-python
,python3.x
应当安装PyMySQL
,在虚拟环境下输入pip install PyMySQL
即可;若使用mysql-python
, 在配置文件下,数据库驱动DRIVER = mysqldb
,若使用PyMySQL
则DRIVER = pymysql
Step 3:添加库 flask-sqlalchemy
在虚拟环境下添加该库(依次输入以下语句)
pipenv shell
...
pip install flask-sqlalchemy
...
Step 4:服务器与 DB 连接(配置文件)
通过 demo01 -> new -> Python File
新建 config.py
作为配置文件
连接数据库的配置格式为
dialect+driver//username:password@host:port/database?charset=utf8
在配置文件中添加以下设置,分别填入格式中的 {}
# encoding = utf-8
DIALECT = 'mysql' # 填入所用的数据库名称
DRIVER = 'pymysql' # 数据库驱动
USERNAME = 'root' # 用于登陆数据库的用户名,这里选用默认的 root
PASSWORD = 'root' # 对应的密码
HOST = '127.0.0.1' # 即 localhost,默认为 127.0.0.1
PORT = '3306' # 安装数据库时选择的端口,默认为 3306
DATABASE = 'db_demo' # 先建立一个名为 db_demo 的数据库
再使用以下语句来进行配置:
SQLALCHEMY_DATABASE_URI = "{}+{}//{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE)
同时在 app.py
文件中导入 config.py
并与数据库进行连接:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
db.create_all()
Step 5:基本 CURD 操作的实现
MySQL 的基本操作:
- 创建数据库:
create database db_demo charset utf8;
- 使用指定数据库:
use db_demo;
- 指定 DB 下列出所有表单:
show tables;
- 查找某一张表(假设为 test):
select *from test
只要是通过
db.session
完成的操作,必须通过db.session.commit()
来提交事务
1. create
增加
- 创建类的实例,并将需要填入 DB 中的数据写入初始化操作当中
test1 = Test(title='first_title', content='first_content')
- 确定事务为“添加“
db.session.add(test1)
- 提交事务
db.session.commit()
2. retrieve
查询
- 创建一个
query
对象,用于接收满足查找条件的数据
result = Test.query.filter(Test.title == 'first_title')
- 将
result
中索引为 1 的信息指定给user1
user1 = result[0]
# 或者写为 user1 = result.first()
# 此时 user1 即指向了 test 表中 title 为 'first_title' 的所有行中的第一行
前两行可合成为一行代码:
user1 = Test.query.filter(Test.title == 'first_title')
- 将值传输给对应 html 文件或直接显示
3. update
更新
改 和 删 这两步操作都以 查 为前提
- 接收对应行数据
user1 = Test.query.filter(Test.title == 'first_title').first()
- 进行 改 操作
user1.content = 'new_content'
- 将 改 这一事务上传至 MySQL DB
db.session.commit()
4. delete
删除
- 接收对应行数据
user1 = Test.query.filter(Test.title == 'first_title').first()
- 进行 删除 操作
db.session.delete(user1)
- 将 删 这一事务上传至 MySQL DB
db.session.commit()