Python-Flask 模型介绍和配置(6)

news2024/11/12 1:09:51

Flask数据模型和连接数据库

  • 一、安装
  • 二、配置数据库连接、创建模型类
  • 三、使用命令创建数据库表
  • 四、以注册为例

flask是基于MTV的结构,其中M指的就是模型,即数据模型,在项目中对应的是数据库。flask与数据库建立联系有很多方法,但一般分为两种,一种是使用pymsql对数据库建立连接;还有一种是ORM映射的方式(基于pymysql),这种方式常用于web开发。以对象的形式与数据库表做映射,方便对象在页面中显示。下面纪录以mysql和orm方式连接数据库。

一、安装

准备工作,安装一下库:

pip3 install pymysql        建公路

pip3 install flask-sqlalchemy    实现ORM映射

pip3 install flask-migrate     发布命令工具

二、配置数据库连接、创建模型类

步骤:
(1) 配置数据库的连接路径

# mysql+pymysql://user:password@hostip:port/databasename
# 数据库+pymysql://用户名:密码@主机ip:端口/数据库名
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1:3306/flaskdemo'

(2) flask-sqlalchemy的搭建:在apps包下创建包ext(第三方库的配置通常建个ext文件夹存放),用于存放与数据库有关的代码,在__init__.py中添加:

   db = SQLAlchemy()   ---->必须跟app联系

在apps/init.py文件(这里我将启动app和app初始化分开了,此处的__init__是app的初始化)下与app建立联系:

   def create_app():
        ....
        # 跟app联系
        db.init_app(app)

        return app

(3) 创建模型:models.py,模型就是类,经常称作模型类

  class User(db.Model):      ------> user表
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(15), nullable=False)
    password = db.Column(db.String(12), nullable=False)
    phone = db.Column(db.String(11), unique=True)
    rdatetime = db.Column(db.DateTime, default=datetime.now)

常见的数据类型:
Integer 整型
String(size) 字符串类型,务必指定大小
Text 长文本类型
DateTime 日期时间
Float 浮点类型
Boolean 布尔类型
PickleType 存储pickle类型 主要跟序列化有关
LargeBinary 存储大的二进制类型

可选的:
primary_key=True 主键
autoincrement=True 自增
nullable=False 不允许为空
unique=True 唯一
default=datetime.now 默认值 可以设置成当前系统时间或者其他的值

三、使用命令创建数据库表

a. 在app.py 中导入模型:from apps.user.models import User —》让模型与app关联
b. 在终端使用命令:db 建立数据库/更新数据库
flask db init -----》 产生一个文件夹migrations
flask db migrate -----> 自动产生了一个版本文件
flask db upgrade ------> 同步,完成数据库表创建

     项目结构
      | ---apps
      | ---ext
      | ---migrations    flask db init     只需要init一次
               |---versions   版本文件夹
                    |---71edde7ee937_.py    ---》 flask db migrate  迁移
                    |---cc0dca61130f_.py
                                                  flask  db upgrade 同步
                                                  flask  db downgrade 降级

四、以注册为例

1.创建app、migrate(绑定app、数据库),app.run启动入口
在这里插入图片描述
2.apps文件下__init__.py文件初始化app配置
在这里插入图片描述
3.数据库配置
在这里插入图片描述

4.创建模型类
在这里插入图片描述
5.通过命令创建数据库表
flask db init -----》 产生一个文件夹migrations
flask db migrate -----> 自动产生了一个版本文件
flask db upgrade ------> 同步,完成数据库表创建
此刻在pycharm的数据库视图中可以看到创建好的数据库表
在这里插入图片描述
6.编写注册逻辑(视图)

# 用户注册
@user_bp.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        repassword = request.form.get('repassword')
        phone = request.form.get('phone')
        email = request.form.get('email')
        if password == repassword:
            # 注册用户
            user = User()
            user.username = username
            # 自定义加密:new_password = hashlib.sha256(password.encode('utf-8')).hexdigest()
            # 使用自带的函数实现加密:generate_password_hash
            user.password = generate_password_hash(password)
            print(len(user.password))
            user.phone = phone
            user.email = email
            # 添加并提交
            db.session.add(user)
            db.session.commit()
            return redirect(url_for('user.index'))
    return render_template('user/register.html')

7.编写模板即html页面即可实现简单的注册功能,实现MTV的整合

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《安富莱嵌入式周报》第292期:树莓派单片机100M双通道示波器开源,MDK5.38发布,万用表单芯片解决方案,8通道±25V模拟前端芯片,开源贴片拾取电机板

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新视频教程: GUI综合实战视频教程第3期:GUIX Studio一条龙设计主界面,底栏和…

【计算机毕业设计】32.学生宿舍管理系统源码

一、系统截图(需要演示视频可以私聊) 摘 要 随着计算机技术的飞速发展及其在宿舍管理方面应用的普及,利用计算机实现对学生宿舍管理势在必行。经过实际的需求分析,本系统采用Eclipse作为开发工具,采用功能强大的MySQL…

计算狗携手成都超算中心和重庆大学,共同助力“碳中和”

为了积极稳妥推进碳达峰碳中和,加快成渝双城经济圈建设。成都计算狗牵手国家超算中心和重庆大学,开展了关于二氧化碳电催化还原反应的路径计算工作,积极推动川渝两地实现产学研合作和成果落地转化,深入推进能源革命。 电催化还原二…

APS生产排单软件模拟排程功能

APS生产排单软件通过预先设定好相关基本资料与约束规则,当订单、机台、工具、材料、上下班时间等任何影响生产计划的因素变化后,执行“一键式排程计算”,系统即可生成生产详细排程。 通过选择不同的排产方案,可以实现不同的排程效…

3.60 怎么对OrCAD的网络标号进行统一批量修改?OrCAD中怎么设置复制位号的增加机制?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

CANoe-vTESTstudio之Test Diagram编辑器(入门介绍)

1. 什么是Test Diagram编辑器 Test Diagram编辑器和Test Table编辑器不同 Test Table编辑器可以在编辑区域直接添加测试元素Test Case/Test Sequence/Test Fixture/Test Group,在CANoe软件的Test Unit里生成测试用例 Test Diagram编辑器以图形的方式定义实际的测试顺序、设…

springcloud16:总结配置中心+消息中心总结篇

架构图 启动分布式配置中心服务端从github中获取配置文件客户端访问服务端获取配置文件 当github中更改配置文件时,服务端可以立刻更改,但是客户端需要重启才能获取到更改的配置文件,如何优化? 即可以通过运维人员去手动刷新客户…

爬虫到底难在哪里?

爬虫本质是采集数据,通俗的讲就是模拟人在App或者浏览器的操作步骤自动化获取数据,本身没有什么难度,伪造HTTP 请求就好。 但是有些公司会给你设置采集障碍,大公司还有专门的安全团队防采集。 你看搞安全的程序员或者黑客平均技术…

【设计模式】组合模式(Composite Pattern)

组合模式属于结构型模式,又可以叫做部分-整体模式,主要解决客户程序在具有整体和部分的层次结构中,处理一组相似对象比处理单一对象费时费力的问题。例如,一个图形,它可以是一个简单的圆形、方形或一条线(部…

paddleocr检测模型训练记录

标注好数据集后 分为训练集、测试集 数据集格式需要与配置文件一致,为了方便,我直接使用以下格式。 PaddleOCR主目录下,自己新建文件夹:car_plate_images/images_det train、test、里面是图片 det_label_test、det_label_train、…

Python遥感开发之GDAL读写遥感影像

Python遥感开发之GDAL读写遥感影像1 读取tif信息方法一2 读取tif信息方法二3 自己封装读取tif的方法(推荐)4 对读取的tif数据进行简单运算5 写出tif影像(推荐)前言:主要介绍了使用GDAL读写遥感影像数据的操作,包括读取行、列、投影…

基于51单片机霍尔汽车自行车码表测速测里程显示proteus仿真原理图PCB

功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶分三种显示模式 a)显示实时速度和本次里程 b)显示当前时间 c)显示报警速度和总里程 2.超过报警速度将声光报警 3.功能按键介绍 a显示状态下: 上’键——电机速度1 下’键——电机速度-1 设置’键——电机启动/暂…

四、【基础】组件实例三大核心属性之一 state

文章目录1、CODE2、Result2.1、初始化2.2、触发更新3、state简写理解: state是组件对象最重要的属性, 值是对象(可以包含多个key-value的组合)组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件) 注意: 组件中rende…

算法导论习题—摊还时间代价分析、栈实现队列、贪心算法近似比、集合覆盖问题

在执行的nnn个操作中,有至多⌈lgn⌉⌈lg n⌉⌈lgn⌉个操作的次序是222的幂,这些操作的次序(即代价)如下 1,2,4,8,⋅⋅⋅,2⌈lgn⌉1, 2, 4, 8, , 2 ⌈lg n⌉ 1,2,4,8,⋅⋅⋅,2⌈lgn⌉ nnn个操作的总代价为 T∑k0⌈lgn⌉2k(n−⌈…

Android App网络通信中利用okhttp实现下拉刷新和上拉加载实战(抓取文章信息 超详细 附源码)

需要源码和工具类请点赞关注收藏后评论区留言私信~~~ 一、实现下拉刷新和上拉加载功能 网络上的信息很多,往往无法依次拉下来,故而App引入了分页加载功能,最开始先展示第一页内容,等到用户拉到该页底部后再去加载下一页内容&…

网络安全面试、实习、校招经验打包分享

整理收集了近些年的资料 内几乎覆盖了各大公司,大厂小厂都有 很多培训机构都是收费提供 本公众号无任何套路全部免费 提供下载学习 为了防止失效,建议下载收藏起来 以后总会用得上! 下面截取部分资料 腾讯-安全技术实习生 时长&am…

流媒体技术基础-摄像头接口与标准

一、摄像头接口概括 摄像头按接口分类如下 主板直接接的专用接口 SPI接口:串行传输、速度慢。常用用于MCU DVP接口:并口传输,速度较慢,传输的带宽低。 MIPI接口:手机平台标准接口,差分串口传输&#xff…

CSS3基础

CSS 层叠样式表Cascading Style Sheets,缩写为CSS,是一种样式表语言,用来描述HTML或XML(包括如SVG、MathML、XHTML 之类的XML 分支语言)文档的呈现。 CSS描述了在屏幕、纸质、音频等其它媒体上的元素应该如何被渲染的问…

AI 预测世界杯比赛结果,惊掉下巴

哈喽,大家好。 今天看到Kaggle上有一个预测世界杯比赛结果的项目,截至目前 4 场比赛预测结果全中。 今天把源码研究了一下,做了中文注释,给大家分享下。 文章目录技术提升1. 获取数据集2. 特征工程3. 建模4. 预测技术提升 本文…

“软硬兼施”,全方位守护企业数据安全

编者按:知识管理涉及大量企业数据,所以其数据安全问题不容忽视。如何做好企业知识管理安全?本文分析了企业数据安全问题主要来自哪里,并从设备、部署、人员管控三方面出发,最终指出了解决方案。 关键词:私…