Flask-分开Models解决循环引用

在之前我们测试中,所有语句都在同一个文件中,但随着项目越来越大,管理起来有所不便,所以将Models分离.
基本的文件结构如下

\—–app.py
\—–models.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from models import Article app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./Article.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
db = SQLAlchemy(app) # db.create_all()
@app.route('/')
def index():
return 'index' if __name__ == '__main__':
#最好关闭debug
app.run()
from app import db
class Article(db.Model):
__tablename__='article'
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(100),nullable=False)
content = db.Column(db.Text,nullable=False)

但此时会出现循环引用的错误,也就是你需要我的,我需要你的,错误如下图

解决方法

新建一个exts.py文件
\—–app.py
\—–models.py
\—–exts.py

exts.py文件内容如下

from flask_sqlalchemy import SQLAlchemy
#此时先不传入app
db = SQLAlchemy()

app.py更改如下
去掉from flask_sqlalchemy import SQLAlchemy
增加db.init_app(app)

from flask import Flask
from models import Article app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./Article.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
db.init_app(app) # db.create_all()
@app.route('/')
def index():
return 'index' if __name__ == '__main__':
#最好关闭debug
app.run()

models.py

from exts import db
class Article(db.Model):
__tablename__='article'
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(100),nullable=False)
content = db.Column(db.Text,nullable=False)

Flask-分开Models解决循环引用的更多相关文章

  1. 深入研究Block用weakSelf、strongSelf、@weakify、@strongify解决循环引用(上)

    深入研究Block捕获外部变量和__block实现原理 前言 在上篇中,仔细分析了一下Block的实现原理以及__block捕获外部变量的原理.然而实际使用Block过程中,还是会遇到一些问题,比如R ...

  2. swift闭包中解决循环引用的问题

    swift中可以通过三种方法解决循环引用的问题 利用类似oc方法解决循环引用weak var weakSelf = self weak var weakSelf = self loadData = { ...

  3. 【C++】智能指针简述(五):解决循环引用的weak_ptr

    总结一下前文内容: 1.智能指针通过RAII方法来管理指针:构造对象时,完成资源初始化;析构对象时,对资源进行清理及汕尾. 2.auto_ptr,通过“转移所有权”来防止析构一块内存多次.(如何转移? ...

  4. block为什么用copy以及如何解决循环引用

    在完成项目期间,不可避免的会使用到block,因为block有着比delegate和notification可读性更高,而且看起来代码也会很简洁.于是在目前的项目中大量的使用block. 之前给大家介 ...

  5. Swift-闭包使用及解决循环引用问题

    Swift中闭包使用参考OC中block使用,基本一致 // 闭包类型 首先写(参数列表)->(返回值类型) func loadData(callBack : (jsonData:String) ...

  6. 第八章 springboot + mybatis + 多数据源2(解决循环引用)

    解决了循环引用 1.application.properties #the first datasource jdbc.names:1,2 jdbc1.driverClassName = com.my ...

  7. Spring如何解决循环引用

    概念 什么是循环引用? 故名思义,多个对象形成环路. 有哪几种循环引用? 在Spring中存在如下几种循环引用,一一举例分析一下 注入循环引用(Set注入 注解注入) package c.q.m; i ...

  8. 深入研究Block用weakSelf、strongSelf、@weakify、@strongify解决循环引用(下)

    深入研究Block捕获外部变量和__block实现原理 EOCNetworkFetcher.h typedef void (^EOCNetworkFetcherCompletionHandler)(N ...

  9. 如何在 iOS 中解决循环引用的问题

    稍有常识的人都知道在 iOS 开发时,我们经常会遇到循环引用的问题,比如两个强指针相互引用,但是这种简单的情况作为稍有经验的开发者都会轻松地查找出来. 但是遇到下面这样的情况,如果只看其实现代码,也很 ...

随机推荐

  1. MySQL主从复制以及在本地环境搭建

    MySQL主从复制原理: master(主服务器),slave(从服务器) MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事binary log ...

  2. MySQL的数据读取过程

    本文来自:http://blog.chinaunix.net/uid-20785090-id-4759476.html 对于build-in的innodb的架构,每次当发布IO请求时,究竟是mysql ...

  3. Computer Vision_33_SIFT:Improving Bag-of-Features for Large Scale Image Search——2010

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  4. node-exporter cpu使用率为负数

    在prometheus利用公式:100 - (avg by (instance) (irate(node_cpu{instance="xxx", mode="idle&q ...

  5. Matplotlib介绍

    目录 一.    Matplotlib介绍    1 二.    初级绘制    1 1.    绘图简介    1 2.    在上面的过程中,主要就是下面三个元素:    1 三.    2D各种 ...

  6. 清除keil编译中间文件的脚本

    清除keil编译生成的中间文件,减小项目体积. keykill.bat del *.bak /s del *.ddk /s del *.edk /s del *.lst /s del *.lnp /s ...

  7. 控制台警告libpng warning: iCCP: known incorrect sRGB profile

    用控制台测试数据的时候,出现的这个问题.虽然只是一个警告但是看着就是不太舒服 ,见下图 弄了好长时间,无意间切换个输入法,原先使用的是QQ输入法 切换成微软五笔以后,竟然好了 好了 好了

  8. 大海航行靠舵手 华为云靠什么征服K8S?

    Kubernetes 是Google开源的容器集群管理系统或者称为分布式操作系统.它构建在Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于 ...

  9. SpringBoot + MySQL + MyBatis 整合 Redis 实现缓存操作

    本地安装 Redis Redis 安装:https://www.cnblogs.com/oukele/p/11373052.html 项目结构:  SpringBootRedis 工程项目结构如下: ...

  10. LInux、xshell(windows)以及finalshell(mac)的常用命令

    一.Linux历史知识: 应用:安装在各种服务器之上,用于嵌入式 版本:内核版本,发行版本(各个公司对其优化) 二.目录介绍 root:系统管理员登录的默认目录 home:其他用户进来的默认目录 us ...