使用CouchDB Kit和Python;尝试设置数据库而无需设置DB内联

时间:2014-06-09 20:20:04

标签: python flask couchdb couchdbkit

我正在使用couchdbkit构建一个小型Flask应用程序,我正在尝试编写一些Python模型,以便与DB交互更容易(不是内联)。

到目前为止,这是我的代码:

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__()

workflows.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新手,所以我为我的无知道歉

1 个答案:

答案 0 :(得分:1)

如果您的模型(Document)未链接到数据库(正确),则会发生此错误。这是通过set_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)

注意:代码未经过测试。我是从头脑中写下来的,所以可能会有一些错误。