2013-02-09 12 views
19

Molti esempi di app Flask che ho visto hanno i modelli memorizzati direttamente nel file principale dell'applicazione (http://pythonhosted.org/Flask-SQLAlchemy/quickstart.html, http://maximebf.com/blog/2012/10/building-websites-in-python-with-flask/). Altri (http://flask.pocoo.org/docs/patterns/sqlalchemy/) hanno un file "models.py" in cui sono posizionati i modelli.Separare i modelli SQLAlchemy per file in Flask

Come posso avere i modelli di importazione dell'app Flask da file separati, e.x. "User.py"? Quando cerco di creare un file User.py con questi contenuti:

from app import db 

class User(db.Model): 
    [...] 

ottengo il seguente errore:

File "/Users/stackoverflow/myapp/models/User.py", line 1, in <module> 
from app import db 
ImportError: No module named app 

Quando inserisco from models import User nel mio file di modulo.

+0

Ma dove è definito 'db'? Se crei 'db' in' database.py', devi '' db. Import db', non da 'app'. –

+0

'db' è definito nel mio file principale' app.py': 'db = SQLAlchemy (app)'. – element119

+0

Non so dove altro definirlo, perché quindi la variabile "app" non sarà in ambito in nessun altro file. – element119

risposta

14

Questa risposta è stata estremamente utile: https://stackoverflow.com/a/9695045/353878.

Avevo bisogno di non inizializzare il db subito.

+1

Che cosa significa "non inizializzare il db subito"? – johnny

+1

@johnny Significa che 'SQLAlchemy()' non deve prendere 'app' come parametro nel modulo utilizzato. Nella maggior parte degli esempi è possibile vedere 'SQLAlchemy (app)' ma in questo caso richiede 'app' da un altro ambito. Invece è possibile utilizzare 'SQLAlchemy()' non inizializzato e utilizzare il metodo 'init_app (app)' successivamente come descritto in [http://stackoverflow.com/a/9695045/2040487](http://stackoverflow.com/a/9695045/2.040.487). –

-1
from app.database import Base 

class User(Base): 
__tablename__ = 'users' 

Non dovrebbe essere in questo modo ??

+0

Che assomiglia a SqlAlchemy, non a Flask-SqlAlchemy come l'op richiesto. –

Problemi correlati