1

次のように構成しているフラスコベースのアプリケーションがあります。

from flask import Flask
from flask.ext.mongoengine import MongoEngine

app = Flask(__name__)
app.config["MONGODB_DB"] = "my_tumble_log"
app.config["SECRET_KEY"] = "KeepThisS3cr3t"

db = MongoEngine(app)

if __name__ == '__main__':
    app.run()

次のようなすべてのモデルを含む models.py ファイルがあります。

from flask import url_for
from tumblelog import db


class Post(db.Document):
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    title = db.StringField(max_length=255, required=True)
    slug = db.StringField(max_length=255, required=True)
    body = db.StringField(required=True)
    comments = db.ListField(db.EmbeddedDocumentField('Comment'))

    def get_absolute_url(self):
        return url_for('post', kwargs={"slug": self.slug})

    def __unicode__(self):
        return self.title

    meta = {
        'allow_inheritance': True,
        'indexes': ['-created_at', 'slug'],
        'ordering': ['-created_at']
    }

別のデータベースとそのコレクションをそこで使用できるように、新しいルートを定義したいと思います。

@app.route('/sampleroute')
def sample_route():
    #Insert Code to use another database of a specific name
    #Query Out a particular "OtherClass" that would be in models.py

その「/sampleroute」内だけで「my_tumble_log」の代わりに「db」を「db1」などの他のデータベースと等しく設定できるようにするには、どうすればよいですか? Post が同じ models.py ファイルで行うように、独自のクラス内で「OtherClass」を宣言できますか? または、MongoEngine で実行できないことはありますか?

4

3 に答える 3

2

複数のデータベースを使用するには、connect() を使用して、接続のエイリアス名を指定します。

次に、model.pyメタ タグを追加してデータベースを指定します。

meta = {"db_alias": "user-db"}

詳細については、ドキュメントのMongoDB への接続を参照してください。

于 2012-08-21T22:20:13.943 に答える
0

Document クラスで {"db_alias": alias_name} を使用するだけです

エイリアス名 register_connect(alias_name,db,host,port) を確実に登録するために、必要な数のエイリアスを登録できます。register_connect のドキュメントは次のとおりです: https://mongoengine-odm.readthedocs.org/en/latest/apireference.html#mongoengine.register_connection

于 2013-05-07T17:51:58.860 に答える
0

私はこのように仕事をしました:1、私のmodels.pyで:

meta = {'db_alias': 'user-db'}

2、私のアプリで/ init .py:

from flask.ext.mongoengine import MongoEngine
db = MongoEngine()
db.register_connection('user-db', name='user-db')

3,それは仕事です。

于 2016-01-12T07:27:15.460 に答える