मैं कर रहा हूँ मेरी बोतल आवेदन मॉडल, ब्लूप्रिंट बिखरने द्वारा फिर से बाँटे लेकिन मैं एक रनटाइम त्रुटि हो रहा है उठाया गया था।बोतल मॉडल बिखरने, RuntimeError जब: 'आवेदन db पर पंजीकृत नहीं'
def create_app():
app = flask.Flask("app")
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
app.register_blueprint(api)
db.init_app(app)
db.create_all()
return app
मैं निम्नलिखित समस्या (नमूना परियोजना यहाँ की मेजबानी कर रहे हैं: https://github.com/chfw/sample): है
Traceback (most recent call last):
File "application.py", line 17, in <module>
app = create_app()
File "application.py", line 12, in create_app
db.create_all()
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 856, in create_all
self._execute_for_all_tables(app, bind, 'create_all')
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 836, in _execute_for_all_tables
app = self.get_app(app)
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 809, in get_app
raise RuntimeError('application not registered on db
'RuntimeError: application not registered on db
instance and no application bound to current context
मैं इस विषय पर एक शोध किया। फिर से फैक्टरिंग यहाँ का सुझाव दिया है:
Flask-SQLAlchemy import/context issue
एक ही समस्या यहाँ उठाया गया था:
app.register_blueprint(api)
db.app=app #<------------<<
db.init_app(app)
:
और ऊपर धागा (2010) इस तरह एक हैक सुझाव
क्या किसी को यह ठीक से कैसे करना है? आपने इसे कैसे ठीक किया?
धन्यवाद
ठीक है, यह काम करता है। अब मुझे अपवाद नहीं मिलते हैं। लेकिन अगला वाला यह है: "एप्लिकेशन डीबी पर पंजीकृत नहीं है" -> रनटाइम त्रुटि: एप्लिकेशन डीबी इंस्टेंस पर पंजीकृत नहीं है और वर्तमान संदर्भ – chfw
पर कोई एप्लिकेशन बाध्य नहीं है और यहां अंतर क्या है और db.app = ऐप जोड़ रहा है? – user805981
@ user805981 इस तरह से काम कर सकता है, लेकिन यह बहुत साफ नहीं है। सबसे पहले, आप encapsulation तोड़ रहे हैं, क्योंकि SQLAlchemy पर 'ऐप' विशेषता सार्वजनिक होने के लिए डिज़ाइन नहीं की गई है। उस ऑब्जेक्ट को अन्य चीजों को करने की आवश्यकता हो सकती है जब यह बदल रहा है कि यह किस ऐप का उपयोग कर रहा है। दूसरा, 'app_context' केवल फ्लास्क-स्क्लाक्लेमी को बदलने से अधिक करता है; यह वास्तव में वर्तमान ऐप को बदलने के लिए फ्लास्क को बताता है। इस प्रकार, आपको विभिन्न फ्लास्क एपीआई के साथ चीजों को करने की आवश्यकता हो सकती है, या अपने सभी अन्य फ्लास्क एक्सटेंशन के साथ ऐप के साथ काम करने की आवश्यकता हो सकती है। –