2017-06-13 3 views
0

Ich versuche Flask-Blogging zu einer bestehenden App hinzuzufügen, aber es scheint nicht zu spielen schön mit der bestehenden Flask-SQLAlchemy MySQL Datenbank. Es funktioniert jedoch gut mit einer eigenen SQLite-Datenbank.Flask-Blogging: Fehler: Tabelle [...] existiert nicht, (Tabellen werden nicht erstellt)

Auf App Starten versucht es die Tabellen (jedes Mal) zu erzeugen, und einen Fehler nicht geben:

flask run 
* Serving Flask app "myapp" 
* Forcing debug mode on 
2017-06-13 21:32:33,369:DEBUG:flask-blogging:Created table with table name post 
2017-06-13 21:32:33,371:DEBUG:flask-blogging:Created table with table name tag 
2017-06-13 21:32:33,373:DEBUG:flask-blogging:Created table with table name tag_posts 
2017-06-13 21:32:33,375:DEBUG:flask-blogging:Created table with table name user_posts 
2017-06-13 21:32:33,472:INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

jedoch Zugriff auf die Blogging-Route (richtig) beklagt, dass die Tabelle nicht tut existieren. In der Datenbank suchen, sind sie nicht da.

Hier ist der entsprechende Code:

db = SQLAlchemy() 

def create_app(config_name): 
    app = Flask(__name__) 
    app.config.from_object(config[config_name]) 
    config[config_name].init_app(app) 

    db.init_app(app) 

    migrate = Migrate() 
    migrate.init_app(app, db=db) 

    # Required to prevent Flask-Blogging messing with existing tables 
    from app.models import User, Product, Purchase 

    # Flask-Blogging database config 
    with app.app_context(): 
     storage = SQLAStorage(db=db) 
     blog_engine = BloggingEngine() 
     blog_engine.init_app(app, storage) 

config ist ein Config-Objekt enthält die entsprechende SQL-Verbindungszeichenfolge (in SQLALCHEMY_DATABASE_URI) sowie andere erforderliche Flask-Konfigurationsvariablen und arbeitet gut für den Rest der App .

+0

Hmm. Klar klingt das Flask-Bloggen mit einem eigenen config/connection-Objekt. –

+0

@ShawnMehan Das ist nicht korrekt. Neue Verbindungen werden nur bei Bedarf erstellt. – Goutham

+0

@Matt Können Sie auch die von Ihnen verwendeten Versionen 'SQLAlchemy' und' Flask-SQLAlchemy' bereitstellen? Ihre Implementierung scheint korrekt zu sein und wird in 'Flask-Blogging' unterstützt. – Goutham

Antwort

0

Demonstrieren die Gefahren der Cut-and-Paste-Programmierung (wo man nicht wirklich verstehen, was der Code tut), mir fehlte:

db.create_all() 

Shame SO dich nicht lassen löschen peinlich dumme Fragen. :-)

1

Flask-Blogging verwendet die db, um die metadata zu erhalten. Es kann eine Interaktion geben, die uns hier fehlt. Können Sie versuchen, metdata explizit für das Datenbankobjekt und Blogging-Speicher festzulegen?

from sqlalchemy import MetaData 

metadata = MetaData() # 
db = SQLAlchemy(metadata=metadata) 
... 
db.init_app(app) 
... 
storage = SQLAStorage(db=db) 
# or 
#storage = SQLAStorage(engine=db.engine, metadata=metadata) 
... 
+0

Ich vermisste 'db.create_all()'. Entschuldigen Sie die Umstände! – Matt

+0

Ahh! Froh, dass es funktioniert. – Goutham

+0

Danke fürs Einspringen und Danke fürs Flask-Blogging! – Matt

Verwandte Themen