一、介绍

主要介绍flask_sqlalchemy、flask_script、flask_migrate这三个组件该如何整合到flask项目中,以及如何使用。

# 安装组件
pip3 install flask_sqlalchemy
pip3 install flask_script
pip3 install flask_migrate # flask_sqlalchemy:
将Flask和SQLAlchemy很好的结合在一起
# flask_script:
用于生成命令,在项目根目录路径下使用命令
例如:python manage.py runserver
# flask_migrate
用来实现数据库迁移(依赖flask-script)

二、项目结构

所有的操作说明在代码注释中;下图,migrations是数据库迁移时生成的(不必理会),create_table.py是在还没有使用flask-migrate组件时用来在数据库中创建表的(不必理会),requirements.txt后续会有说明。

项目示例下载

index.py:介绍了在视图函数中如何进行数据库操作

from flask import Blueprint
from pro_flask import db
from pro_flask import models idx = Blueprint("index", __name__) @idx.route("/index")
def index():
# 使用SQLAlchemy在数据库插入一条数据
"""
db.session.add_all([
models.UserInfo(name="佩奇"),
models.UserInfo(name="乔治")
])
db.session.commit()
db.session.remove()
"""
# 查询
ret = db.session.query(models.UserInfo).all()
print(ret)
db.session.remove()
return "Index"

__init__.py

from flask import Flask
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() # 把以后用到的所有数据库相关的东西封装在此(实例化必须在导入蓝图上面)
"""
flask_sqlalchemy使用步骤:
1、导入并实例化SQLAlchemy
2、在models.py中导入db,类继承db.Model
3、在create_app函数中使用db.init_app(app),可以理解为去app中读取配置文件
""" from pro_flask.views.index import idx
from pro_flask.views.account import account
from pro_flask.models import * def create_app():
app = Flask(__name__, template_folder="templates", static_folder="statics", static_url_path="/static")
app.config.from_object("settings.BaseConfig")
app.register_blueprint(idx)
app.register_blueprint(account)
# Session(app)
db.init_app(app) # 依赖app中的配置文件
return app

models.py:相当于Django中的models.py作用

from sqlalchemy import Column
from sqlalchemy import Integer, String, UniqueConstraint, Index
from . import db class UserInfo(db.Model):
__tablename__ = "userinfo" id = Column(Integer, primary_key=True)
name = Column(String(16), index=True, unique=True, nullable=False) __table_args__ = (
# UniqueConstraint("id", "name", name="unic_id_name"), # 联合唯一索引
# Index("idx_age_birthday", "age", "birthday"), # 联合索引
)

create_table.py:可以让你知道是如何在数据库中创建表的

from pro_flask import db, create_app

app = create_app()
app_ctx = app.app_context() # app_ctx = app/g
with app_ctx: # __enter__,通过LocalStack放入Local中
db.create_all() # 调用LocalStack放入Local中获取app,再去app中获取配置 """
右键执行即可在数据库中创建表;
但是不用这种操作,可以使用flask-migrate组件实现数据库迁移;
具体使用方式,请看manage.py
"""

manage.py:程序启动文件

from pro_flask import db
from pro_flask import create_app
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand app = create_app()
manager = Manager(app)
Migrate(app, db)
manager.add_command("db", MigrateCommand) # 新增一个叫做"db"的命令
"""
数据库迁移命令:
python manage.py db init # 只执行第一次就行了,表结构修改后,执行下面两个命令就可以了
python manage.py db migrate # 相当于Django中的makemigrations
python manage.py db upgrade # 相当于Django中的migrate
""" # @manager.command
# def custom(arg):
# """
# 按照位置传参自定义命令
# python manage.py custom 123
# :param arg:
# :return:
# """
# print(arg) # 123
#
# @manager.option("-n", "--name", dest="name")
# @manager.option("-u", "--url", dest="url")
# def cmd(name, url):
# """
# 按照关键字传参自定义命令
# python manage.py cmd -n pd -u https://www.baidu.com
# :param name:
# :param url:
# :return:
# """
# print(name, url) if __name__ == "__main__":
# app.run() # 有了manager就可以写成下面这种格式了
manager.run() # 启动命令(在项目根目录下执行命令)
"""
python manage.py runserver
python manage.py runserver -h 127.0.0.1 -p 8080
"""

settings.py:如果使用DBUtils,也可以放在配置文件中

import redis

class BaseConfig(object):
# flask-session配置
# SESSION_TYPE = "redis"
# SESSION_REDIS = redis.Redis(host="127.0.0.1",port=6379) # 使用Flask-SQAlchemy需要做以下配置
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:""@127.0.0.1:3306/test_db?charset=utf8"
SQLALCHEMY_POOL_SIZE = 10 # 连接池大小
SQLALCHEMY_MAX_OVERFLOW = 5 # 在连接池达到最大值后可以创建的连接数;当这些额外的连接回收到连接池后将会被断开和抛弃。
SQLALCHEMY_POOL_TIMEOUT = 20 # 池中没有连接最多等待的时间,否则报错
SQLALCHEMY_TRACK_MODIFICATIONS = False class ProductConfig(BaseConfig):
pass

Flask项目中整合各组件的更多相关文章

  1. 项目中整合第三方插件与SpringMVC数据格式化关于ip地址

    一.Bootstrap 响应式按钮 <div calss="col-sm-2"> <button class="btn btn-default btn- ...

  2. Flask项目中使用mysql数据库启动项目是发出警告

    Flask项目中使用mysql数据库启动项目是发出警告: Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA ...

  3. spring web项目中整合netty, akka

    spring web项目中整合netty, akka 本身的web项目仍然使用tomcat/jetty8080端口, 在org.springframework.beans.factory.Initia ...

  4. Axis2在Web项目中整合Spring

    一.说明: 上一篇说了Axis2与Web项目的整合(详情 :Axis2与Web项目整合)过程,如果说在Web项目中使用了Spring框架,那么又改如何进行Axis2相关的配置操作呢? 二.Axis2 ...

  5. nginx的rewrite ,如何在flask项目中获取重写前的url

    1. 在flask配一个重写到哪的路由,假设是/rewite/,然后到nginx的配置文件写重写规则,我这里重写全部的请求,接着测试能否重写成功 1. 添加一个路由 配置重写规则 测试成功 2.接下来 ...

  6. 结合manage.py,在flask项目中使用websocket模块--- flask-socketio

    前言:       - 为什么我要使用 flask-socketio模块,而不是flask-sockets?       - 因为flask-socketio与前端流行的websocket库socke ...

  7. 项目中调用ExcelCom组件时的配置流程

    异常提示如下:         Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有:        1 文件名称或路径不存在.       2 文件正被其他程序使 ...

  8. 18,flask项目中使用celery

    导包: from celery import Celery from celery.result import AsyncResult app.config['CELERY_BROKER_URL'] ...

  9. flask项目中使用富文本编辑器

    flask是一个用python编写的轻量级web框架,基于Werkzeug WSGI(WSGI: python的服务器网关接口)工具箱和Jinja2模板,因为它使用简单的核心,用extension增加 ...

随机推荐

  1. android 反编译 for mac

    android反编译现在来说的话很方便. windows上有不好好用的工具,当然我比较喜欢dex2jar 这个是比较好用的,打开他的文件目录会发现,里面有很多.sh .bat文件 那也就是说在wind ...

  2. 我为什么从python转向go

    应puppet大拿刘宇的邀请,我去西山居运维团队做了一个简短分享,谈谈为什么我要将我们的项目从python转向go. 坦白的讲,在一帮python用户面前讲为什么放弃python转而用go其实是一件压 ...

  3. hdu 1043 Eight

    欸我一直以为双向bfs是搜完一半再搜另一半呢,妹想到是两个一起搜 然后队列里放的结构体里不能直接存答案,所以做一个邻接表一样的东西,直接指向需要的字符即可 记录状态用康托展开来hash 以及居然是多组 ...

  4. bzoj 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通【记忆化搜索】

    震惊!记忆化搜索忘记返回map值调了半小时! 边(u,v)的经过次数是:能到u的牛数*v到n的方案数.正反两次连边,dfs两次即可 #include<iostream> #include& ...

  5. 分布式消息通信(ActiveMQ)

    分布式消息通信(ActiveMQ) 应用场景 异步通信 应用解耦 流量削峰 # ActiveMQ安装 下载 http://activemq.apache.org/ 压缩包上传到Linux系统 apac ...

  6. 个人微信号二次开发SDK协议,个人微信号二次开发api接口

    通过这个API接口可以做什么? 通过我们提供的API接口您可以开发: 工作手机(如:X创,X码,XX管家等) 微信群讲课软件(如:讲课X师,一起X堂等) 微信社群管理软件(如:小X管家,微X助手等) ...

  7. multiprocessing的进程通信Pipe和Queue

    pipe管道,2个进程通信,允许单项或者双向,multiprocessing.Pipe(duplex=False)为单项,默认双向 示例: from multiprocessing import Pr ...

  8. SQL在一张表中根据父ID获取所有的子ID

    with a as ( select id,name,parentid from categories where id=53 union all select x.id,x.name,x.paren ...

  9. Spring.Net学习笔记(7)-事务

    一.开发环境 操作系统:Win7 编译器:VS2010 二.涉及程序集 Spring.Core.dll Spring.Data.dll Common.Logging.dll 三.开发过程 1.项目结构 ...

  10. 为什么字符串类型可以调用构造函数String的方法,却又不是它的实例

    从所周知,在js中定义一个字符串我们有两种办法: var a = new String("a"); var a = "a"; 第一种方法使用构造函数创建,作为S ...