1, 什么是循环引用问题?为什么会导致循环引用?

1.1先讲是什么?

主文件中class类过多会导致主文件冗余,如下图,所以我们单独给class类一个文件,然后再引用它。

1.2再讲为什么?

主文件为models_sep.py文件,

models.py文件为:

可以看到,models.py文件要从主文件models_sep.py中引用生成的db,即“db = SQLAlchemy(app)”,在models.py中写完“class Article(db.Model):”后要被主文件models_sep.py引用回去,这时候回出现如下情况:


这里为什么不能导入“Article”呢?因为:


这就导致了循环引用。
2,解决方案为,把db单独放个文件装起来:

 

3,最后的效果为:

#models_sep.py
'''
这里相当于把“class Article”模型之类的放在不同的py文件中。
''' from flask import Flask
from models import Article #在hello_world会用到Article,所以需要引用,引用就会出错,所以需要这样写。
from ext import db import config app = Flask(__name__) app.config.from_object(config) db.init_app(app) #这里“init_app”是专门为了解决循环引用的
db.create_all()
@app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run()
#ext.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
#models.py
from ext import db class Article(db.Model):
__tablename__ = "article"
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
title = db.Column(db.String(),nullable=False)
# config.py
#dialect+driver://username:password@host:port/database
# dialect:是数据库的实现,比如MySql,SQLlite,且转换为小写
# driver:对应的驱动,比如MySql的驱动是MySqldb
# username:连接数据库的用户名
# password:密码
# host:连接数据库的域名
# port:数据库监听的端口号
# database:是连接的数据库的名字,创建数据库语句为:
"""create database db_demo1(database_name) charset utf8""" # 如果以上输出了1则说明SQLAlchemy能成功连接到数据库。 DIALECT = "mysql"
DRIVER = "mysqldb"
USERNAME = "root"
PASSWORD = ''
HOST = "127.0.0.1"
PORT = ""
DATABASE = "xh" SQLALCHEMY_DATABASE_URI="{}+{}://{}:{}@{}:{}/{}".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
"""指定一个名为SQLALCHEMY_DATABASE_URI的固定变量,注意是固定的写法"""
SQLALCHEMY_TRACK_MODIFICATIONS =False
												

最新文章

  1. 检索Google Maps地图位置(小训练)
  2. 用百度webuploader分片上传大文件
  3. extjs5 常用属性的说明
  4. 15 sql base line 工作机制
  5. shiny server SparkR web展示界面(一)
  6. 设计模式C#实现(八)——原型模式
  7. Greedy:Cleaning Shifts(POJ 2376)
  8. 学习HTML5之新特性标签一览(详细)
  9. 2dx关于js响应layer触摸消息的bug
  10. shell提示符显示git当前分支
  11. QoS令牌桶工作原理
  12. VR全景,零售业冬天里的一把火——全景智慧城市
  13. AngularJS学习篇(二十二)
  14. Vue 浅谈前端js框架vue
  15. 有关mysql的for update以及 死锁问题
  16. ubuntu上安装boost库
  17. golang程序在windows上,注册为服务
  18. 仿<赶集生活>client启动动画效果
  19. 必看的 jQuery性能优化的38个建议
  20. ThinkPHP开发博客系统笔记之二

热门文章

  1. 模拟赛20181016 dp
  2. typescript + echarts-for-react 制作渐变柱状图, 提示[ts] 类型“Graphic”上不存在属性“LinearGradient”
  3. 异常处理--logging模块
  4. [经验交流] 试用基于 influxdb+kapacitor 的监控系统
  5. BUGKU login3
  6. kruskal重构树学习笔记
  7. qml layout
  8. Go语言--基础语法笔记
  9. 内地视频网站对各种浏览器HTML5的支持情况
  10. php输出语句 echo print printf print_r var_dump sprintf