flask web api mysql,使用 flask 框架开发 web 应用,初始化数据库的代码放在哪里最合适?...

python新手,最近使用flask做web应用时,发现个奇怪的问题。

在wsgiapp.py文件中启动flask的web应用,启动前先初始化了全局数据库对象(在另一个db.py文件中),其他蓝图中url处理函数再访问该全局数据库对象,db模块中的engine为None,需要重新初始化一次才能访问数据库。

但是定义在wsgiappp.py的路由函数却能直接访问数据库(也就是已经初始化过),后来尝试在两个地方print hash(db),发现结果不同。

这是什么原因,明明import的是同一个模块。记得之前用自己写的wsgi函数的话,没有这种问题的,flask 在调用run()函数启动webapp后有什么特别的操作吗?

我的python版本是2.7.9

贴下几个主要代码

wsgiapp.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from flask import Flask, render_template

from www.api import api_urls

from mvc import db

app = Flask(__name__)

app.config.from_object('config.config')

app.register_blueprint(api_urls.api_bp)

#init db

db.create_engine('dbuser', 'dbpasswd', 'dbname')

@app.route('/')

def index():

return render_template('index.html')

@app.route('/test')

def test():

print hash(db) #与api_urls.py的hash结果不同

print hash(db.engine) #db.engine不为None

return render_template('test.html')

if __name__ == '__main__':

app.run()

api_urls.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from flask import Blueprint, render_template, request, jsonify

from www.mvc import db

api_bp = Blueprint('api_bp', __name__)

#不再初始化一次数据库则不能访问

# db.create_engine('dbuser', 'dbpasswd', 'dbname')

@api_bp.route('/blogs')

def blogs_list():

print hash(db) #与wsgiapp.py的hash结果不同

print hash(db.engine) #不在文件中初始化的话,db.engine为None

return 'blogs'

db.py用的是廖雪峰老师python博客教程里的db.py

项目结构大致这样:

└─www

├─api --->api_urls.py

├─config

├─mvc --->db.py

└─wsgiapp.py

第一次碰到这种坑,找了半天资料无果,不知道大家以前有没有碰到类似的问题?

thanks in advance :)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值