0

私はcouchdbkit小さなFlaskアプリを構築するために使用しています.DBとのやり取りが簡単になるように(インラインではなく)、いくつかのPythonモデルを書き出そうとしています.

これまでの私のコードは次のとおりです。

base.py

from couchdbkit import *
from api.config import settings


class WorkflowsCloudant(Server):

    def __init__(self):
        uri = "https://{public_key}:{private_key}@{db_uri}".format(
            public_key=settings.COUCH_PUBLIC_KEY,
            private_key=settings.COUCH_PRIVATE_KEY,
            db_uri=settings.COUCH_DB_BASE_URL
        )
        super(self.__class__, self).__init__(uri)


class Base(Document):

    def __init__(self):
        server = WorkflowsCloudant.get_db(settings.COUCH_DB_NAME)
        self.set_db(server)
        super(self.__class__, self).__init__()

ワークフロー.py

from couchdbkit import *
from api.models.base import Base


class Workflow(Base):
    workflow = DictProperty()
    account_id = IntegerProperty()
    created_at = DateTimeProperty()
    updated_at = DateTimeProperty()
    deleted_at = DateTimeProperty()
    status = StringProperty()

コントローラー 初期化.py

from api.models import Workflow

blueprint = Blueprint('workflows', __name__, url_prefix='/<int:account_id>/workflows')

@blueprint.route('/<workflow_id>')
def get_single_workflow(account_id, workflow_id):
    doc = Workflow.get(workflow_id)

    if doc['account_id'] != account_id:
        return error_helpers.forbidden('Invalid account')

    return Response(json.dumps(doc), mimetype='application/json')

私が取得し続けるエラーは次のとおりです。TypeError: doc database required to save document

私はここ( http://couchdbkit.org/docs/gettingstarted.html )のセットアップに従おうとしましたが、インラインの指示をより動的なコンテキストに外挿しました。また、私はPython初心者なので、無知で申し訳ありません

4

1 に答える 1

1

このエラーは、モデル (ドキュメント) がデータベースに (正しく) リンクされていない場合に発生します。これは withset_dbメソッドによって行われます。

また、モデルを変更する必要があると思います:

from couchdbkit import Document
from couchdbkit import StringProperty, IntegerProperty
from couchdbkit import DateTimeProperty,  DictProperty

class Workflow(Document):
    workflow = DictProperty()
    account_id = IntegerProperty()
    created_at = DateTimeProperty()
    updated_at = DateTimeProperty()
    deleted_at = DateTimeProperty()
    status = StringProperty()

Base 継承を Document クラスに変更しました。from some_module import *!の使用も避けてください。

このようにモデルを設定したら、次のようにモデルとcouchdbをリンクできます:

Workflow.set_db(server)

注: コードはテストされていません。勝手に書いたので間違いがあるかもしれません。

于 2015-03-04T13:05:20.710 に答える