2017-03-17 3 views
0

Anstelle von Kolben-Peewee Ich benutze Ebene peewee Paket.Flask + Peewee: Wo Tabellen erstellen?

Hier ist die Art, wie ich die Datenbank bin Initialisierung:

import os 

# just extending the BaseFlask with yaml config reader 
from . extensions.flask_app import Flask 

# peewee's wrapper around the database 
from playhouse.flask_utils import FlaskDB 


db_wrapper = FlaskDB() 


# define the application factory 
def create_app(env): 

    app = Flask(__name__) 

    # load config depending on the environment 
    app.config.from_yaml(os.path.join(app.root_path, 'config.yml'), env) 

    # init extensions 
    db_wrapper.init_app(app) 

    # ... 

Ich weiß, dass ich diese Tabellen erstellen rufen sollte:

from . models import User 

db_wrapper.database.connect() 
db_wrapper.database.create_tables([User]) 

Aber wo ich die Schaffung Code Tisch , so dass die Datenbank bereits initialisiert wäre?

bearbeiten

Mit Blick auf den docs fand ich heraus, dass ich User.create_table(fail_silently=True) so verwenden kann:

# in app/__init__.py 

# define the application factory 
def create_app(env): 

    app = Flask(__name__) 

    # load config depending on the environment 
    app.config.from_yaml(os.path.join(app.root_path, 'config.yml'), env) 

    # init extensions 
    db_wrapper.init_app(app) 

    create_tables(); 

    # rest of the initialization 

def create_tables(): 

    from . models import User  
    User.create_table(fail_silently=True) 

Ist es in Ordnung, es hier zu tun? Oder gibt es einen besseren Weg/Werkzeug dafür?

bearbeiten

es herausgefunden. Bitte, siehe meine Antwort unten.

Antwort

0

aktualisieren

Ich weiß nicht über die eingebaute in CLI Unterstützung in Flask. Ich weiß nicht, ob Sie einen solchen Ansatz überhaupt in Betracht ziehen sollten, da Sie Dinge aus der Box heraus tun können (siehe documntation).


kann ich das Kolben-Skript Paket nutzen. Ich habe es schon einmal gemacht, es einfach übersehen.

Aktivieren Sie Ihre virtuellen Umgebung und Lauf:

pip installieren Kolben-Skript

Dann manage.py Datei in Ihrem Stammverzeichnis erstellen, fügen Sie diese Zeilen :

import os 
from app import create_app, db_wrapper 
from app.models import * 
from flask_script import Manager, Shell 

# create the application instance  
app = create_app(os.getenv('FLASK_ENV', 'development')) 

# instantiate script manager 
manager = Manager(app) 

def make_shell_context(): 
    return dict(app=app, db_wrapper=db_wrapper, User=User) 


@manager.command 
def run_shell(): 
    Shell(make_context = make_shell_context).run(no_ipython=True, no_bpython=True) 


# here's my simple command 
@manager.command 
def create_tables(): 
    User.create_table(fail_silently=True) 


@manager.command 
def run_tests(): 
    import unittest 
    tests = unittest.TestLoader().discover('tests') 
    unittest.TextTestRunner(verbosity=2).run(tests) 


# run it 
if __name__ == '__main__': 
    manager.run() 
+0

Warum Flask-Script verwenden? Flask bietet seit über einem Jahr eine integrierte CLI. Fügen Sie einfach einen benutzerdefinierten Befehl mit '@ app.cli.command' hinzu. – davidism

+0

@davidism Ich wusste das nicht. Danke, dass du mich darauf hingewiesen hast. Ich werde das überprüfen. – lexeme

+0

Achten Sie darauf, Ihre Verbindungen nach dem Erstellen der Tabellen zu bereinigen! – coleifer