2017-09-25 17 views
0

はここthis guideごとに、一番下に座って、私は私のmodels.pyファイルを持っているコードです:これは、インポート時に実行されますこのコードを「工場」のパラダイムに組み込むにはどうすればよいですか?

db.configure_mappers() 
db.create_all() 
db.commit() 

。私はモデルをインポートするたびだから今、私は、次のメッセージが表示されます:

RuntimeError: application not registered on db instance and no applicationbound to current context

私は工場出荷時のパラダイムにこのコードを考慮するかどうかはわかりません。私は関数内でコードをラップしようとし、create_appでそれを呼び出しました。

私は、これは私が取得エラーであることを行うと:

sqlalchemy.exc.CompileError: (in table 'ad', column 'search_vector'): Compiler <sqlalchemy.dialects.sqlite.base.SQLiteTypeCompiler object at 0x7f81bfc14940> can't render element of type <class 'sqlalchemy.dialects.postgresql.base.TSVECTOR'>

search_vector列SQLAlchemyの検索可能なクイックスタートガイドから取られた、非常に単純です:

search_vector = db.Column(TSVectorType('title', 'body'))

答えて

0

あなたのアプローチは正しい - 関数内でコードを初期化する:

from models import db 

def create_app(): 
    app = Flask(__name__) 

    db.init_app(app) 
    db.configure_mappers() 
    db.create_all() 
    db.commit() 

    return app 

app = create_app() 

それとも、あなたの起動ファイルがパラメータ(models.py)などのアプリケーションを取る関数を定義混乱回避したい場合:

def init_db(app): 
    db.init_app(app) 
    db.configure_mappers() 
    db.create_all() 
    db.commit() 

とアプリケーションを初期化する機能を使用します。

from models import init_db 

app = Flask(__name__) 
init_db(app) 

しかし、あなたのエラーは別の問題によって引き起こされます:SQLiteはTSVectorをサポートしていません。PostgreSQL固有の機能です。 SQAlchemy-Searchableのすべての例は、PostgreSQLデータベース用に書かれています。

また、SQLiteにはフルテキスト検索機能がありません。おそらく別のDBMSに切り替える必要があります。

関連する問題