Web开发----Flask-SQLAlchemy数据库操作 , Flask-Script 外部脚本扩展 , Flask-Migrate数据库迁移

本文详细介绍了Flask的数据库操作,包括Flask-SQLAlchemy的配置与数据库操作,如模型定义、数据查询。同时,讲解了Flask-Script用于外部脚本扩展,以及Flask-Migrate实现数据库迁移的步骤,包括创建迁移仓库、生成迁移脚本和更新数据库。
摘要由CSDN通过智能技术生成

一、Flask回顾

1.什么是Flask?

在这里插入图片描述
用户访问浏览器的过程
用户访问浏览器,不是直接访问我们写的flask项目,是通过一个服务器,NGINX或者阿帕奇(企业一般前端的服务器是NGINX,后端是很多个阿帕奇),这是http服务,协议是http协议(超文本传输协议)(有标签的标记语言)
flask项目不是http协议,要通信需要一个中间人,uWSGI,uWSGI与NGIX通信时http协议,与flask通信是WSGI协议,把Ngix和flask链接起来。Flask是我们呢再写代码的时候一直处理的业务逻辑,比如,要处理哪个url交给哪个函数去处理,返回结果交给uWSGI,uWSGI交给NGINX,NGINX交给浏览器。

2.jinja2的模板引擎有什么作用?

以前我们写什么就给用户返回什么页面,现在我们要求给不同的用户返回不同的页面,用户名是会变的 ,我们可以添加一些for循环、if语句等语法,从后台获取到用户名传给前端页面,获取到真正的用户。

3.用户访问浏览器过程中,在flask内部流程

在这里插入图片描述
用户访问/login,先交给NGINX–>uWSGI–>Flask–>Flask先去访问的第一个文件是run.py主函数,通过路由去执行定义函数,返回一个html页面。

**run.py主函数中,在定义函数中,**首先判断请求方法是GET还是POST,如果是GET,返回一个登陆界面login.html,login.html和其他的html文件都在一个templtes目录中放着,找到login.html后看他有没有传变量,传变量的话就给他填充进去,最后把填充的结果返回,是一系列字符串,最后返回给客户。

在定义函数里面我们首先实例化了一个form表单对象,这个form.py里面定义了两个函数:LoginForm,RegisterForm,登陆、注册的时候需要用户名、密码、确认密码等,在获取页面时吧form表单传进去了,wtf能够快速生成表单。返回一个html字符串回来。

获取到用户名后,首先看数据库中有没有这个用户,并验证信息是否正确,才能登陆成功,

二、Python数据库连接方式

1.python中的数据库连接有两种方式:

  • Python 标准数据库接口,使用 SQL 语句正常操作数据库, e.g: MySQL 关系型数据库的 pymsql 模块
  • 用 ORM 来进行数据库连接, Python 中使用 sqlalchemy , flask中典型的flask_sqlalchemy ,已面向对象的方式进行数据库的连接与操作

2.ORM 是什么?有什么优势?

==ORM ,即 Object-Relational Mapping (对象关系映射),==它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的 SQL 语句打交道,只需简单的操作对象的属性和方法。
在这里插入图片描述
我们写的python object 面向对象的内容,要在数据库中执行,中间需要OR Mapper和SQL Alchemy Engine来转换称真是的SQL语句,只要用面向对象处理,后端的Mysql还是ORACLE都不用管,只用该中间的OR Mapper和SQL Alchemy Engine就可以了。

三、Flask-sqlalchemy数据库操作实现

1.什么是Flask-SQLAlchemy?

Flask-SQLAlchemy 是一个 Flask 扩展,简化了在 Flask 程序中使用 SQLAlchemy 的操作。SQLAlchemy 是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy 提供了高层 ORM ,也提供了使用数据库原生 SQL 的低层功能。

2.配置数据库

(1)安装第三方模块:

pip install -i https://pypi.douban.com/simple flask-sqlalchemy

(2)pycharm链接数据库

前提要安装mysql数据库
最后要刷新一下
在这里插入图片描述
在这里插入图片描述
最后要刷新一下

(3)数据库配置

官方配置信息网址:http://www.pythondoc.com/flask-sqlalchemy/config.html

# app.py文件 
from flask_sqlalchemy import SQLAlchemy 
# 获取当前绝对路径 

basedir = os.path.abspath(os.path.dirname(__file__)) 
app = Flask(__name__)
# SQLALCHEMY_DATABASE_URI: 用于连接数据的数据库。 
app.config['SQLALCHEMY_DATABASE_URI'] =\ 'sqlite:///' + os.path.join(basedir, 'data.sqlite') 
# sqlchemy将会追踪对象的修改并且发送信号 
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 
# 每次请求结束之后都会提交数据库的变动 
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True 
# 数据库与app项目关联, 返回SQLAlchemy实例对象,后面可以使用对象调用数据 
db = SQLAlchemy(app)

在这里插入图片描述

3.数据库基本操作案例

应该有的框架文件,但不一定都用到:
在这里插入图片描述
run.py

from flask import Flask
from flask_sqlalchemy import  SQLAlchemy

app = Flask(__name__) #确定flask所在位置
app.config.from_pyfile('config.py') #从python文件中导入配置
db = SQLAlchemy(app)
# from views import *

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

config.py

# 获取当前绝对路径
import os

basedir = os.path.abspath(os.path.dirname(__file__))
# SQLALCHEMY_DATABASE_URI: 用于连接数据的数据库。
# sqlite:home/kiosk/Desktop/201905python/day36-1/01_Flask与数据库操作的整合/data.sqlite
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
#  sqlchemy将会追踪对象的修改并且发送信号
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 每次请求结束之后都会提交数据库的变动
SQLALCHEMY_COMMIT_ON_TEARDOWN = True

models.py

# 数据库模型
# 数据库连接, db.Model
from run import db

"""
create table users (id int primary key, name varchar(20) unique );
"""


class User(db.Model):
    __tablename__ = 'users'  #表名
    id = db.Column(db.Integer, autoincrement=True, primary_key=True)
    name = db.Column(db.String(20), unique=True)
    age = db.Column(db.Integer, default=18)
    email = db.Column(db.String(20), unique=True)
   
    #友好显示字符串
    def __repr__(self):
        return  '<User: %s>' %(self.name)


if __name__ == '__main__':
    # 创建模型文件中定义的数据库表(一个类对应一个数据库表)
    db.create_all()

    # # 创建: 添加用户信息到users表中
    # user = User(name='westos')
    # # 1). 添加到会话中;
    # db.session.add(user)
    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值