Передать значение в flask функцию

Пишу простое веб приложение на Flask. Подскажите пожалуйста, как передать conn и cur в функцию getAllContent ?

 app = Flask(__name__)
    
    @app.route('/' )
    def getAllContent():
    
        page = request.args.get("page")
        qry = "select * from items "
        print(cur.execute(qry))
    
        return "yetfy"
    
    
    
    
    if __name__ == "__main__":
     
        conn = sqlite3.connect('orders.db', timeout=30)
        cur = conn.cursor()
        cur.execute("""CREATE TABLE IF NOT EXISTS items(id INTEGER PRIMARY KEY NOT NULL,
                                                           title TEXT, 
                                                           url TEXT, 
                                                           detail TEXT, 
                                                           published INTEGER
                                                           );""")
        conn.commit()
       
    
        app.run(host="0.0.0.0")

Ответы (1 шт):

Автор решения: Sergey K.

То что Вы хотите сделать - вынести соединение (переменную conn) в глобальный контекст. Для веб приложения это не особо хорошее решение, но делается примерно так:

app = Flask(__name__)
# Тут мы вынесли переменную в глобальный контекст
conn = None
    
        
@app.route('/' )
def getAllContent():
        page = request.args.get("page")
        qry = "select * from items "
        
        # Здесь уже обращаемся к глобальной переменной, в которой уже иницилизировано соединение
        cur = conn.cursor()     
        print(cur.execute(qry))

        return "yetfy"


if __name__ == "__main__": 
        global conn = sqlite3.connect('orders.db', timeout=30)
        cur = conn.cursor()
        cur.execute("""CREATE TABLE IF NOT EXISTS items(id INTEGER PRIMARY KEY NOT NULL, title TEXT, url TEXT, detail TEXT, published INTEGER);""")
        conn.commit()

        app.run(host="0.0.0.0")

Но такой подход лучше использовать для клиентский приложений, например, в мобильном или десктопном приложении. На сервере же при запросе или иной необходимости лучше инициализировать новое соединение. Однако, SqLite не выдержит большого количества новых соединений. Поэтому, могу посоветовать использовать сразу нормальные СУБД - PostgreSQL, MySQL или MS SqlServer. Я бы порекомендовал PostgreSQL, так как он бесплатный, в отличие от SqlServer.

→ Ссылка