2013-02-09 20 views
19

Gördüğüm Flask uygulamaları için birçok örnek doğrudan ana uygulama dosyasında (http://pythonhosted.org/Flask-SQLAlchemy/quickstart.html, http://maximebf.com/blog/2012/10/building-websites-in-python-with-flask/) saklanan modellere sahiptir. Diğerleri (http://flask.pocoo.org/docs/patterns/sqlalchemy/), modellerin yerleştirildiği bir "models.py" dosyasına sahiptir.Ayrı SQLAlchemy modellerini Flask'taki dosyaya göre

Flask uygulamasının içe aktarma modellerini ayrı dosyalardan nasıl alabilirim, e.x. "User.py"?

from app import db 

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

aşağıdaki hatayı alıyorum: Ben bu içeriği ile bir User.py dosyası oluşturma çalıştığınızda

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

benim modül dosyasında from models import User eklemek

.

+0

Fakat "db" nerede tanımlandı? Eğer 'database.py' içinde 'db' yaratırsanız,' app'den değil. –

+0

'db' ana 'app.py' dosyasında tanımlandı:' db = SQLAlchemy (app) '. – element119

+0

Başka nerede tanımlayacağımı bilmiyorum, çünkü "app" değişkeni başka bir dosyada kapsam dahilinde olmayacak. – element119

cevap

14

Bu yanıt çok faydalı oldu: https://stackoverflow.com/a/9695045/353878.

Doğrudan db'yi başlatmam gerekiyordu.

+1

Bu, "db'yi hemen başlatmayın" anlamına ne geliyor? – johnny

+1

@johnny Bu, SQLAlchemy() 'nin, kullanılan modülde" app "parametresini almak zorunda olmadığı anlamına gelir. Çoğu örnekte 'SQLAlchemy (app)' ı görebilir, ancak bu durumda diğer uygulamalardan 'app' gerektirir. Bunun yerine, başlatılmamış 'SQLAlchemy()' kullanabilir ve daha sonra [http://stackoverflow.com/a/9695045/2040487](http://stackoverflow.com/a/9695045 adresinde açıklandığı gibi 'init_app (app)' yöntemini kullanabilirsiniz./2.040.487). –

-1
from app.database import Base 

class User(Base): 
__tablename__ = 'users' 

Bu şekilde olmalı mı?

+0

İstenen op gibi Flask-SqlAlchemy değil SqlAlchemy gibi görünüyor. –