اذهب إلى المحتوى
  • 0

خطأ No application found في فلاسك Flask؟

Mohssen A Mohssen

السؤال

أحاول أن أقوم بفصل النماذج models في تطبيق فلاسك Flask، لذلك قمت بنقلهم إلى ملفات مختلفة على النحو التالي:

الملف الأول الذي يحتوي على كائن SQLAlchemy:

# ./shared/db.py

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

ثم أقوم بإستدعاء الملف السابق في app.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from shared.db import db

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'My connection string is here'
db.init_app(app)

وفي نموذج user.py:

from shared.db import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email_address = db.Column(db.String(300), unique=True, nullable=False)
    password = db.Column(db.Text, nullable=False)

المشكلة الآن أنه عندما أحاول أن أقوم بإنشاء الجداول من خلال db.create_all يظهر لي الخطأ التالي:

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

كيف يمكنني إستخدام التابع db.create_all بشكل سليم؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

عندما تحاول الوصول إلى التطبيق الحالي current_app أو أي شيء يستعمله سوف تحصل على رسالة الخطأ التالية:

RuntimeError: Working outside of application context.

وهي مشابهة لرسالة الخطأ التي لديك، حيث أنك تحتاج إلى إستخدام app_context لعمل Push للـ context الخاص بالتطبيق بالشكل التالي:

# في ملف app.py

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'My connection string'
db.init_app(app)

# لاحظ كيفية إستخدام الجملة with لتمرير app_context
with app.app_context():
    db.create_all()

يمكنك أيضًا أن تقوم بإستخدام التابع push مباشرة (في حالة كنت تستعمل سطر الأوامر)، كالتالي:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app
  

في سطر الأوامر:

>>> from yourapp import create_app
>>> app = create_app()
>>> app.app_context().push()

الطريقة الأخرى هي تمرير app نفسه إلى db.create_all:

db.create_all(app=create_app())

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...