前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask框架与SQLAlchemy框架手牵手,一起走

Flask框架与SQLAlchemy框架手牵手,一起走

作者头像
码农飞哥
发布2021-08-18 11:15:01
1.3K0
发布2021-08-18 11:15:01
举报
文章被收录于专栏:好好学习

您好,我是码农飞哥,感谢您阅读本文!上一篇文章我们介绍了快速上手SQLAlchemy框架,两分钟了解Python之SQLAlchemy框架的使用今天就让我们学习下如何将Flask框架与SQLAlchemy框架进行整合。在Python的Web项目中我们都是使用Flask框架的,快速上手Flask请参考一分钟学会Flask框架的安装与快速使用。

项目结构图

下图展示的就是整个项目的项目结构:

软件环境

软件

版本

Python

3.6.7

Flask

1.0.2

Flask-Cors

3.0.7

Flask-Script

2.0.6

Flask-SQLAlchemy

2.3.2

SQLAlchemy

1.2.17

PyMySQL

0.9.3

依赖下载

我们这里将依赖都放在了requirements.txt文件中进行管理,依赖库如下:

代码语言:javascript
复制
  1. click==7.1.2
  2. Flask==1.0.2
  3. Flask-Cors==3.0.7
  4. Flask-Script==2.0.6
  5. Flask-SQLAlchemy==2.3.2
  6. SQLAlchemy==1.2.17
  7. PyMySQL==0.9.3

所以,依赖下载的话只需要执行该文件即可,执行的命令是:

代码语言:javascript
复制
  1. pip install -r requirements.txt

编码

准备工作做好之后,就下来就是写代码环节了。这里创建了两个数据表,一个是用户表,一个是文章表,本系列文章要实现的是创建一个博客系统。

0. 数据表准备

代码语言:javascript
复制
  1. -- 用户表
  2. CREATE TABLE `user` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  4. `username` varchar(35) NOT NULL COMMENT '用户名',
  5. `password` varchar(35) NOT NULL COMMENT '密码',
  6. PRIMARY KEY (`id`),
  7. UNIQUE KEY `username` (`username`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
  9. -- 文章表
  10. CREATE TABLE `post` (
  11. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  12. `author_id` int(11) NOT NULL COMMENT '作者id',
  13. `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  14. `title` varchar(50) NOT NULL COMMENT '标题',
  15. `body` varchar(2048) NOT NULL COMMENT '正文',
  16. PRIMARY KEY (`id`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';

1. 添加数据库配置

创建一个config.py文件,路径是 flaskr/config.py,这里主要添加的是数据库配置,如果后期有其他配置也可以在该文件里面。

代码语言:javascript
复制
  1. # 数据库连接池
  2. SQLALCHEMY_DATABASE_URI = 'mysql://root:123@127.0.0.1:23306/job'
  3. # 自动提交事务
  4. SQLALCHEMY_COMMIT_ON_TEARDOWN = True
  5. # 自动回滚事务
  6. SQLALCHEMY_TRACK_MODIFICATIONS = True
  7. SQLALCHEMY_POOL_SIZE = 10
  8. SQLALCHEMY_MAX_OVERFLOW = 5
  9. # 开启调试模式
  10. DEBUG = True

2. 初始化数据库

数据库的基本配置弄好之后,接下来就是初始化数据库,创建应用,文件地址 flaskr/__init__.py

代码语言:javascript
复制
  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. # 初始化数据库
  4. db = SQLAlchemy()
  5. def create_app():
  6. app = Flask(__name__)
  7. # 加载数据库配置
  8. app.config.from_object('config')
  9. # 向app中导入并注册db
  10. db.init_app(app)
  11. return app

3. 创建数据表对应的model

我们知道SQLAlchemy是一个ORM框架,就是将数据表与对象进行对应的。所以,针对前面的user表和post表,我们分别建立两个model。下面以user表为例,文件地址:flaskr/model/interactive_user.py

代码语言:javascript
复制
  1. from flaskr import db
  2. #定义user表对应的model类InteractiveUser
  3. class InteractiveUser(db.Model):
  4. __tablename__ = 'user'
  5. id = db.Column(db.Integer, primary_key=True)
  6. username = db.Column(db.String(80), unique=True)
  7. password = db.Column(db.String(80), unique=True)
  8. # 序列化
  9. @property
  10. def serialize(self):
  11. return {
  12. 'id': self.id,
  13. 'username': self.username,
  14. 'password': self.password
  15. }
  16. #定义获取属性的各个方法
  17. def get_id(self):
  18. return self.id
  19. def get_username(self):
  20. return self.username
  21. def get_password(self):
  22. return self.password

4. 进行增删改查

最后一步,就是编写业务代码进行增删改查了。这里只会列举一些基本的查询方法,详细的查询方法,请参考,两分钟了解Python之SQLAlchemy框架的使用,下面所有的方法都是在 flaskr/biz/user_service.py文件中。

4.1 新增数据
代码语言:javascript
复制
  1. def insert_user(username, password):
  2. try:
  3. user = InteractiveUser()
  4. user.username = username
  5. user.password = password
  6. #将对象user放入session
  7. db.session.add(user)
  8. #提交数据
  9. db.session.flush()
  10. return user
  11. except SQLAlchemyError as e:
  12. db.session.rollback()
  13. raise e
4.2 更新数据
代码语言:javascript
复制
  1. # 根据用户ID更新用户密码
  2. def update_model_state(id, password):
  3. user = db.session.query(InteractiveUser).filter(InteractiveUser.id == id).first()
  4. user.password = password
  5. db.session.commit()
  6. return user
4.3 查询数据
代码语言:javascript
复制
  1. # 根据用户名查找用户
  2. def query_user_by_username(username, password):
  3. print('username={},password={}', username, password)
  4. user = db.session.query(InteractiveUser.id).filter(InteractiveUser.username == username,
  5. InteractiveUser.password == password).first()
  6. return user

5. 设置启动类

前面的步骤弄好之后,就到了我们的最后一步了,创建一个启动类,用于运行我们的app。文件地址是:/flaskr/manage.py。这里将项目的端口号设置为 5001。

代码语言:javascript
复制
  1. from flaskr import create_app
  2. import pymysql
  3. # 初始化MySQLdb模块
  4. pymysql.install_as_MySQLdb()
  5. app = create_app()
  6. if __name__ == '__main__':
  7. app.run(host='0.0.0.0', port=5001)

启动项目

总结

本文详细介绍了如何将Flask框架与SQLAlchemy框架进行整合。整体来说还是比较 简单,另外本文中的项目结构比较清晰,适合于在正式的项目中运用。需要注意的是:项目启动之后,我们还不能直接运行增删改查的方法。还需要创建一个视图类。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农飞哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目结构图
  • 软件环境
  • 依赖下载
  • 编码
    • 0. 数据表准备
      • 1. 添加数据库配置
        • 2. 初始化数据库
          • 3. 创建数据表对应的model
            • 4. 进行增删改查
              • 4.1 新增数据
              • 4.2 更新数据
              • 4.3 查询数据
            • 5. 设置启动类
            • 启动项目
            • 总结
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档