1

フラスコでmongokitを使用していますが、作成したコレクションを使用しようとするたびにエラーが発生しますNo collection found

コレクションを別のファイル models.py で定義しました。次のようになります。

from mongokit import Connection, Document
import os
import sys

here = os.path.dirname(os.path.abspath(__file__))
path = os.path.abspath(os.path.join(here, 'settings'))
sys.path.append(path)
from settings import base as settings

connection = Connection()

@connection.register
class Contact(Document):
    __database__ = settings.MONGO_DBNAME
    __collection__ = "Contact"

    structure = {
        "name":unicode,
        "mobile_number":unicode,
    }

    required_fields = ["name"]


@connection.register
class User(Document):
    __database__ = settings.MONGO_DBNAME
    __collection__ = 'User'

    structure = {
        "username":unicode,
        "twitter_access_token":unicode,
        "twitter_token_secret":unicode,
        "contacts":[Contact]
    }
    required_fields = ["username"]
    default_values = {
            "twitter_access_token": "",
            "twitter_token_secret": ""
        }

しかし、私は試しました:

>>> from models import User
>>> u = User()
>>> u["username"] = "somename"
>>> u.save()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/fernandocezar/.virtualenvs/contacts/lib/python2.7/site-packages/mongokit/document.py", line 404, in save
    self.validate(auto_migrate=False)
  File "/Users/fernandocezar/.virtualenvs/contacts/lib/python2.7/site-packages/mongokit/document.py", line 230, in validate
    (size_limit, size_limit_str) = self._get_size_limit()
  File "/Users/fernandocezar/.virtualenvs/contacts/lib/python2.7/site-packages/mongokit/document.py", line 214, in _get_size_limit
    server_version = tuple(self.connection.server_info()['version'].split("."))
  File "/Users/fernandocezar/.virtualenvs/contacts/lib/python2.7/site-packages/mongokit/document.py", line 622, in __getattribute__
    raise ConnectionError('No collection found') 
mongokit.mongo_exceptions.ConnectionError: No collection found

このチュートリアルに従いましたが、表記法さえconnection.<dbname>.<collection>()機能しません。そして、はい、確かにそのようなコレクションがあります。

私は何が欠けていますか?

4

1 に答える 1

3

リンクしたチュートリアルを引用するには:

ただし、繰り返しを避けるために、ドキュメント定義でデータベースとコレクションの名前を指定しましょう。

@connection.register
class BlogPost(Document):
    __collection__ = 'blog_posts'
    __database__ = 'blog'
    structure = {...}

>>> bp = connection.BlogPost()

シェルの例では、モデル オブジェクトはconnectionオブジェクトを通じて構築されます。あなたの場合、あなたは単純にuser = User(). connectionモデルの登録に使用したのと同じインスタンス (例: ) を介してユーザーを作成してみてくださいuser = connection.User()

于 2012-10-19T19:34:12.607 に答える