我正在使用带有烧瓶的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
我关注this tutorial,但即使符号connection.<dbname>.<collection>()
也无效。是的,确实存在这样的集合。
我错过了什么?
答案 0 :(得分:3)
引用您链接的tutorial:
为避免重复自己,让我们指定数据库和 文档定义中的集合名称:
@connection.register class BlogPost(Document): __collection__ = 'blog_posts' __database__ = 'blog' structure = {...} >>> bp = connection.BlogPost()
在shell示例中,模型对象是通过connection
对象构造的。在您的情况下,您只是在做user = User()
。尝试通过您用于注册模型的相同connection
实例创建用户(例如user = connection.User()
)。