Mohssen A Mohssen نشر 26 ديسمبر 2021 أرسل تقرير مشاركة نشر 26 ديسمبر 2021 أحاول أن أقوم بفصل النماذج 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 بشكل سليم؟ 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 سامح أشرف نشر 26 ديسمبر 2021 أرسل تقرير مشاركة نشر 26 ديسمبر 2021 عندما تحاول الوصول إلى التطبيق الحالي 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()) 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Mohssen A Mohssen
أحاول أن أقوم بفصل النماذج models في تطبيق فلاسك Flask، لذلك قمت بنقلهم إلى ملفات مختلفة على النحو التالي:
الملف الأول الذي يحتوي على كائن SQLAlchemy:
ثم أقوم بإستدعاء الملف السابق في app.py:
وفي نموذج user.py:
المشكلة الآن أنه عندما أحاول أن أقوم بإنشاء الجداول من خلال db.create_all يظهر لي الخطأ التالي:
No application found. Either work inside a view function or push an application context.
كيف يمكنني إستخدام التابع db.create_all بشكل سليم؟
رابط هذا التعليق
شارك على الشبكات الإجتماعية
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.