यह मेरा database.pyफ्लास्क आप inq_db() के साथ घोषणात्मक रूप से sqlalchemy का उपयोग कैसे करते हैं?
engine = create_engine('sqlite:///:memory:', echo=True)
session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
Base = declarative_base()
Base.query = session.query_property()
def init_db():
# import all modules here that might define models so that
# they will be registered properly on the metadata. Otherwise
# you will have to import them first before calling init_db()
import models
Base.metadata.create_all(engine)
है और यह मेरा backend.py
from flask import Flask, session, g, request, render_template
from database import init_db, session
from models import *
app = Flask(__name__)
app.debug = True
app.config.from_object(__name__)
# Serve static file during debug
if app.config['DEBUG']:
from werkzeug import SharedDataMiddleware
import os
app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
'/': os.path.join(os.path.dirname(__file__), 'static')
})
@app.route('/')
def foo():
session.add(User())
session.commit()
return "NOTHING HERE."
if __name__ == "__main__":
init_db()
app.run(port=8888)
मैं अजीब बातें की एक जोड़ी देख रहा हूँ:
- जब मैं
python backend.py
कर मैं कर रहा हूँ टेबलों को दो बार बनाया जा रहा है। वही निर्माण तालिका विवरण - जब मैं '/' पर जाता हूं, तो मुझे निम्न त्रुटि मिल रही है जब भी मुझे 100% यकीन है कि तालिकाएं बनाई गई हैं। क्यूं कर?
cursor.execute(statement, parameters) OperationalError: (OperationalError) no such table: users u'INSERT INTO users DEFAULT VALUES'()
क्या आप अपना मॉडल कोड भी पोस्ट कर सकते हैं? सुनिश्चित नहीं है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं। सामान्य रूप से, आपको केवल एक बार डेटाबेस निर्माण (init_db) कॉल करना चाहिए। मैं कम से कम सुझाव देता हूं, इसे backend.py से बाहर ले जाएं और बस एक बार पहले डेटाबेस.py को कॉल करें। – codegeek