首页 > 数据库 >Flask python 开发篇:模型(model)Flask-SQLAlchemy的使用

Flask python 开发篇:模型(model)Flask-SQLAlchemy的使用

时间:2024-03-28 14:32:53浏览次数:51  
标签:SQLAlchemy resource String Flask self db Column python INTEGER

Flask-SQLAlchemy实现模型

一、为什么使用模型?

上一篇分享了蓝图的使用,也说蓝图相当于了php中控制器+路由的使用,那根据MVC的经验,我们还需要一层模型(M层)

二、Flask-SQLAlchemy的引入

作为新入行的小白,用原生python去操作数据库有点为难我,所以就想到了肯定有flask的第三方库(插件)来供开发者快速使用。那我们去PyPI中去寻找合适的三方库,为什么用PyPI平台以及如何在该平台寻找需要的三方库,可以点击这里去查看

三、使用Flask-SQLAlchemy构建模型文件

3.1、安装扩展

在PyPI中找到了Flask-SQLAlchemy文档,根据文档我们先看看自己环境中是否已经存在该插件,

pip show flask-SQLAlchemy

若是已经安装,则会显示该插件的基本信息,如下:
在这里插入图片描述

若是未安装,则根据文档进行安装

pip install -U Flask-SQLAlchemy
3.2、配置

安装成功以后,就是配置扩展

app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
3.3、实战使用

直接分享我的代码


from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from typing import List
from flask import jsonify

app = Flask(__name__)
#
# import os
# a=os.getenv('TEST_ENV')
# b=os.getenv('FLASK_ENV')
# print(a)
# print(1111)
# print(b)
#
# @app.route('/test111')
# def tes():
#     return '23456y7u8io'
#

app.config[
    'SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:3310/{DATABASE}?charset=utf8mb4'

db = SQLAlchemy()

db.init_app(app)


class Resource(db.Model):
    __tablename__ = 'resource'

    id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)
    r_type = db.Column(db.INTEGER, default=0, comment='resource type 0 文献 1 指南 2 大会')
    is_show = db.Column(db.INTEGER, default=0, comment='是否上架 0 未上架 1 上架')
    title = db.Column(db.String(40))
    desc = db.Column(db.TEXT)
    cover = db.Column(db.String(40))
    published_time = db.Column(db.String(40))
    content = db.Column(db.TEXT)
    file_path = db.Column(db.String(128))
    origin_link = db.Column(db.String(128))
    view_count = db.Column(db.INTEGER)
    like_count = db.Column(db.INTEGER)
    collect_count = db.Column(db.INTEGER)
    file_size = db.Column(db.String(40))
    publisher_book_name = db.Column(db.String(40))
    resource_type_id = db.Column(db.INTEGER)

    def deal_format(self):
        return {
            "id": self.id,
            "title": self.title,
            "published_time": self.published_time,
            "view_count": self.view_count,
            "publisher_book_name": self.publisher_book_name
        }


@app.route('/list')
def resource_list():

    return jsonify({
        'code': 0,
        'msg': 'success',

    })

app.run()

更多model写法可以参考文档
在这里插入图片描述

3.4、与蓝图相结合使用

我在对应的模块内(也就是跟蓝图同级别),新增了models.py文件,内容如下:

from project import testmyselfdb
from sqlalchemy.orm import Mapped, mapped_column, relationship
# from project import db

from project.extension import db

# 资源内容模型
class Resource(db.Model):
    __tablename__ = 'resource'

    id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)
    r_type = db.Column(db.INTEGER, default=0, comment='resource type 0 文献 1 指南 2 大会')
    is_show = db.Column(db.INTEGER, default=0, comment='是否上架 0 未上架 1 上架')
    title = db.Column(db.String(40))
    desc = db.Column(db.TEXT)
    cover = db.Column(db.String(40))
    published_time = db.Column(db.String(40))
    content = db.Column(db.TEXT)
    file_path = db.Column(db.String(128))
    origin_link = db.Column(db.String(128))
    view_count = db.Column(db.INTEGER)
    like_count = db.Column(db.INTEGER)
    collect_count = db.Column(db.INTEGER)
    file_size = db.Column(db.String(40))
    publisher_book_name = db.Column(db.String(40))
    resource_type_id = db.Column(db.INTEGER)

    def to_format(self):
        return {
            "id": self.id,
            "title": self.title,
            "published_time": self.published_time,
            "view_count": self.view_count,
            "publisher_book_name": self.publisher_book_name
        }

    def __repr__(self) -> str:
        return f'<Resource id={self.id} title={self.title}>'

数据库连接配置请参考这里;
前面在蓝图的使用中说到,个人认为蓝图是php中的控制器+路由的作用,那么根据以往经验,就需要在蓝图里操作数据库(MVC嘛)。参考我的蓝图代码:

from flask import Blueprint, request, jsonify
from typing import List
from . import models


blog_base_blueprint = Blueprint('blog', __name__, url_prefix='/api')


# 获取所有博客文章列表
@blog_base_blueprint.route('/posts', methods=['GET'])
def get_posts():
    resource_id = request.args.get('resource_id', 10)

    resource_lists: List[models.Resource] = (models.Resource.query
                                             .filter(models.Resource.id == resource_id)
                                             .all())

    return jsonify({
        'code': 0,
        'msg': 'success',
        'data': {
            "resource_list": [resource.to_format() for resource in resource_lists]
        }
    })

到目前为止,我所有的文件目录是这样的:

  • app.py是我项目的入口;
  • project文件夹是我所有的业务逻辑存放的地方,在project里,我又根据不同的版块创建了不同的文件夹。那些通用的逻辑比如说配置文件、扩展之类的,我放在了project的最外层,方便project下的每个模块调用。
  • ---- 在project下的blog文件夹里,我存放了跟博客(资源)相关的所有逻辑处理,包括但不限于增删改查上传。blog里又细分了C(蓝图)、M(模型)、S(服务)的逻辑文件,一目了然
    在这里插入图片描述

宣传一波:大家若是有人想北京租房可以联系我,主要是物资学院、通州北关、北苑、草房的房子。(注:我不是中介哟,我也不打算转行做中介,是我靠谱的朋友在做)
在这里插入图片描述

标签:SQLAlchemy,resource,String,Flask,self,db,Column,python,INTEGER
From: https://blog.csdn.net/snow_love_xia/article/details/137008562

相关文章

  • [oeasy]python0012_程序写错了怎么办
    运行python文件_报错处理_NameError......
  • [Python]-基础-1.环境部署
    [Python]基础——环境部署&知识补充一、环境部署1.1软件下载1.1.1版本选择内置函数是Python自带的函数,不同版本的Python,其内置函数在数量和使用上大不相同,尤其是Python2和Python3大版本之间的迭代,教程全程采用Python3.8.3进行代码演示,为了避免版本兼容冲突,希望......
  • Python Flask-Mail实现邮件发送
    使用falsk-mail发送邮件一、邮件发送的扩展二、根据文档,总结发送邮件的流程三、实现邮件发送功能3.1、安装扩展3.2、配置3.3、发送邮件(创建mail、message实例并发送)3.4、发送带附件的邮件3.5、批量发送邮件3.6、异步发送邮件四、写在最后一、邮件发送的扩展关于......
  • FLASK学习记录-PIPENV虚拟环境搭建
     $pipinstallflask-ihttps://pypi.tuna.tsinghua.edu.cn/simpleLookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simpleCollectingflaskDownloadinghttps://pypi.tuna.tsinghua.edu.cn/packages/93/a6/aa98bfe0eb9b8b15d36cdfd03c8ca86a03968a87f27ce22......
  • Python中的杨辉三角
    杨辉三角,也被称为帕斯卡三角,是一个非常有趣的数学结构,它在组合数学中扮演着重要的角色。在这篇博客中,我们将探讨如何在Python中生成杨辉三角,并讨论不同方法的优缺点。杨辉三角简介杨辉三角是一个由数字构成的三角形阵列,其中每个数字是它正上方两个数字的和。例如,下面是杨辉三......
  • python3安装pandas库出现Could not import the lzma module
    1.安装lzma模块使用:python-mpipinstallbackports.lzma2.进入cd/usr/local/python3/lib/python3.7目录(系统不同,目录也有所不同,可以通过which命令来查找当前运行python是使用的那个目录的),然后编辑lzma.py,将下面代码:from_lzmaimport*from_lzmaimport_encode_......
  • Flask后端框架搭建个人图库
    Hello,我是"小恒不会java"前言最近发现自己有一些站点图片丢失,原来是用了人家的链接。考虑到使用对象存储容易被刷流量,可以用flask这种轻量级框架快速实现网页登陆操作,行,也就不考虑正式生产环境那些复杂的登录认证(像token这些)。介绍我简单在服务器上flaskrun了,网址:http:......
  • 机器学习中的LightGBM模型及其优缺点(包含Python代码样例)
    目录一、简介二、优缺点三、样例代码四、总结一、简介LightGBM(LightGradientBoostingMachine)是一种基于梯度提升(GradientBoosting)算法的机器学习模型。它是由微软团队于2017年开发的,旨在解决大规模数据下的效率和准确性问题。LightGBM的原理如下:基于梯度提升:Ligh......
  • 如何系统得自学python?(基础知识篇完)——12.面向对象
     一、面向对象为了方便了解,我们拿面向过程做一个对比例如:肚子饿了,想吃饭面向过程:去超市---买菜---卖肉---买米---回家---洗菜---切肉---炒菜---煮米饭---盛饭---开吃面向对象:点外卖总结:⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使⽤的,不⽤去管他内部的情......
  • 你都用Python来干什么?为什么这么多人想学习Python?
    挺想回答一下这个问题的。我是非码专业,从2019年开始接触python。一开始其实需求非常简单,就是为了处理大量的Excel表格。其实本来四大的工作经历已经让我excel的水平比较高了,各种跨表定位、查询,复杂的字符串操作,还有vba函数都可以处理。但是python铺天盖地的宣传还是让我觉......