Flask中使用flask_socketio不能使用sqlalchemy

来源:1-1 导学

wliupz

2019-04-11

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

写回答

2回答

wliupz

提问者

2019-04-12

谢谢老师抽空看我的问题  这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/.


以下是我简化后的代码  

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
1
wliupz
我找到问题了 是在调用的时候(start_background_task(task))必须是start_background_task(task()) 方法带括号和不带括号有区别的 ... 但还不知道为什么
2019-04-12
共1条回复

7七月

2019-04-11

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

0
2
7七月
回复
wliupz
你这个Python后台线程是具体指什么?还是要说清楚点呀。
2019-04-11
共2条回复

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14447 学习 · 4438 问题

查看课程