请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Flask中使用flask_socketio不能使用sqlalchemy

如题 我要在socketio的后台线程start_background_task中使用数据库 为什么db为空呢

正在回答 回答被采纳积分+3

插入代码

2回答

提问者 wliupz 2019-04-12 09:41:40

谢谢老师抽空看我的问题  这2天被这个问题 弄的头大 ... 

下面是我简化的代码 我是做java的 现在在学python 学了老师的课程后 在做一个其他demo

问题:  在方法task中不能使用sqlAlthemy的db 提示错误:

get_app

    'No application found. Either work inside a view function or push'

RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.


以下是我简化后的代码  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from flask import Flask, Response
from flask_sqlalchemy import SQLAlchemy
from flask_socketio import SocketIO
from threading import Lock
 
app = Flask(__name__)
 
db_str = "{}+{}://{}:{}@{}:{}/{}?charset=utf8"
 
app.config['SQLALCHEMY_DATABASE_URI'= db_str.format('')
 
db = SQLAlchemy()
 
socketio = SocketIO()
 
db.init_app(app)
 
socketio.init_app(app)
 
lockObj = None
 
thread_lock = Lock()
 
thread_flag = None
 
 
@app.route('/')
def run():
    global thread_flag
    with thread_lock:
        if thread_flag is None:
            thread_flag = socketio.start_background_task(task)
    return Response(response='success')
 
 
def task():
    print(' enter ... 'str(db.engine))
 
 
if __name__ == '__main__':
    app.config['JSON_AS_ASCII'= False
    socketio.run(app)


0 回复 有任何疑惑可以回复我~
  • 提问者 wliupz #1
    我找到问题了  是在调用的时候(start_background_task(task))必须是start_background_task(task()) 方法带括号和不带括号有区别的 ... 但还不知道为什么
    回复 有任何疑惑可以回复我~ 2019-04-12 14:14:20
7七月 2019-04-11 18:31:48

抱歉,我对socketio没有了解。但这个理论上是不冲突的。

0 回复 有任何疑惑可以回复我~
  • 提问者 wliupz #1
    老师 python后台线程是不是会隔离上下文?
    回复 有任何疑惑可以回复我~ 2019-04-11 19:05:36
  • 7七月 回复 提问者 wliupz #2
    你这个Python后台线程是具体指什么?还是要说清楚点呀。
    回复 有任何疑惑可以回复我~ 2019-04-11 21:33:05
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号