一、安装连接程序
在控制台中使用语句 pip install pymysql 即可安装
同时为了使用ORM对数据库进行操作(而非sql语句),还需要安装SQLAlchemy
pip install flask-sqlalchemy
二、使用Navicat管理数据库
安装Navicat软件,本体需要收费,可自行搜索DLC,这里就不展示了。
navivathttp://www.navicat.com.cn/安装并装载DLC后,按如下步骤进行连接
连接服务器后选择服务器,按下右键找到新建数据库进行数据库的创建。
编码方式选择utf8mb4(utf8的增强版)
三、连接mysql服务器
导入SqlAlchemy包依赖
from flask_sqlalchemy import SQLAlchemy
构建sql对象,需要导入app对象(链接参数在app.config中)
HostName="127.0.0.1"Port = 3306 #默认为3306,需要自行修改UserName="root" #默认用户名Password="admin"DataBase="database_learn"app.config['SQLALCHEMY_DATABASE_URI']=f"mysql+pymysql://{UserName}:{Password}@{HostName}:{Port}/{DataBase}" />
四、ORM模型和表的映射
一个数据模型与数据库中的一张表对应,这里以创建一个User数据表为例:
class User(db.Model):__tablename__="user"#表名id = db.Column(db.Integer,primary_key=True,autoincrement=True) #主键-- autoincrement为序号自动增长username = db.Column(db.String(100),nullable=False) #不能为空password = db.Column(db.String(100),nullable=False)
然后可以使用db.create_all()将其同步到数据库中
with app.app_context():db.create_all()
五、ORM模型与增删改查
①添加数据
需要执行以下两步:1.将数据添加到session中;2.commit数据
@app.route('/user/add')def add_user():user = User(username="张三",password='123123')db.session.add(user)db.session.commit()return "创建成功"
②查询数据
有两种查询方法:get查询和filter_by查询,区别在于
get是根据主键查询单个对象,需要知道主键(id)
filter_by会根据查询条件返回所有符合要求的对象(需要进行遍历处理)
@app.route('/user/query')def query_user():# 1-get查找(仅根据主键查找--单个查找)user = User.query.get(1)print(f"{user.id}:{user.username}:{user.password}")# 2-filter_by查找(查找所有符合条件的数据)users = User.query.filter_by(username='张三')for user in users:#返回结果为列表,需要进行遍历print(f"{user.id}:{user.username}:{user.password}")return "查找成功"
此外,还可以使用以下代码(虽然应该用得不多)
User.query.all()#查找所有数据User.query.first()#查找第一个数据User.query.order_by()#按照指定字段排序User.query.group_by()#按照指定字段分组User.query.ofsset(x)#跳过前x条数据User.query.limit(x)#对结果数量进行限制User.query.slice(start,stop)#对结果进行切片
③修改数据
@app.route('/user/update')def update_user():user = User.query.filter_by(username='张三').first()user.password='123456'db.session.commit() #同步数据return "修改成功"#多对象修改users = User.query.filter_by(username='张三')for user in users:#返回结果为列表,需要进行遍历user.password='456456'
④删除数据
@app.route('/user/delete')def delete_user():user = User.query.get(1)db.session.delete(user)db.session.commit()return "删除成功"
六、ORM表关系的实现(外键)
①构建外键关系
在ORM模型中,外键通过db.ForeignKey实现
#----外键实现----#class Article(db.Model):__tablename__="article"#表名id = db.Column(db.Integer,primary_key=True,autoincrement=True) #主键-- autoincrement为序号自动增长title = db.Column(db.String(200),nullable=False)content = db.Column(db.Text,nullable=False)#----外键--作者author_id = db.Column(db.Interge,db.ForeignKey("user.id"))
其次,可以通过db.relationship建立联系使得ORM能直接访问外键
author = db.relationship('User',backref="articles") #自动寻找对应的外键表(包含反向引用)
这里需要注意的是,引用的时候与类名匹配而不是与表名匹配。反向引用则要填写你想要的参数,在主类中使用该参数进行访问
②对外键表进行添加
@app.route('/user/add_book')def add_book():article1 = Article(title="名字不够长还好意思叫轻小说?",content="" />
③查找外键表
@app.route('/user/find_book')def find_book():user = User.query.get(2)for article in user.articles:#反向应用的外键类名print(article.title)return "查找成功"
七、使用ORM更改数据库结构
需要额外安装flask-migrate插件
pip install flask-migrate
添加引用
from flask_migrate import Migrate
创建Migrate对象
migrate = Migrate(app,db)
使用此方法会将程序中的ORM模型迁移到数据库中(自动识别更改),所有操作均在控制台下执行,一般分为以下三步:
1.初始化(生成迁移配置文件)
flask db init
2.生成迁移脚本
flask db migrate
3.迁移数据
flask db upgrade
执行完成后会额外生成一个数据表(用于记录迁移脚本的版本号,不需要人为操作)