考虑到完全建立在MongoDB之上的Web服务,虽然我对PyMongo很有帮助,但我想知道你们是否对这些ODM中的任何一个有任何积极或消极的经历/故事:MongoKit,MongoEngine和MongoAlchemy,后者有一个Flask特定包装"Flask-mongoalchemy".
在一个需要NoSQL商店的Django项目上工作,我相信我已经选择了Mongo.我看过很多关于Mongo和Django的话题,但是没有人提到Django-nonrel,我不明白为什么它可能被取消资格,但我没有任何经验.
理想情况下,我想为简单的东西,用户身份验证,组等保留SQL存储,并使用Mongo来获取更大的数据.
我也希望将我的Mongo存储对象作为类,采用Django-ORM风格,这样我就可以有类似的"感觉",但这并不重要.
最后,上面的任何一个允许我使用Django的多数据库支持任何东西,或者我的mongo查询是否有效地从Django ORM"带外"?
如果还有其他因素我错过了可能很重要的事情,请随时提醒我.我对这个领域知之甚少.
我使用MongoKit得到一些非常奇怪的错误:
>>> from mongokit import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/mongokit/__init__.py", line 35, in <module>
from document import Document, ObjectId
File "/usr/local/lib/python2.7/dist-packages/mongokit/document.py", line 48, in <module>
from pymongo.objectid import ObjectId
ImportError: No module named objectid
Run Code Online (Sandbox Code Playgroud)
我尽力找到原因,但没有任何帮助.实际上我用google搜索"ImportError:没有名为objectid的模块"错误,它根本没有结果.我试着按照简单的教程http://namlook.github.com/mongokit/introduction.html#a-quick-example使用MongoKit,本教程的第一行产生了这个奇怪的错误.以下是MongoKit安装的日志.
我做错了什么?
user@server:~$ sudo pip install mongokit
Downloading/unpacking mongokit
Downloading mongokit-0.7.2.tar.gz (69Kb): 69Kb downloaded
Running setup.py egg_info for package mongokit
Downloading/unpacking pymongo>=2.0.1 (from mongokit)
Downloading pymongo-2.2.tar.gz (228Kb): 228Kb downloaded
Running setup.py egg_info for package pymongo …
Run Code Online (Sandbox Code Playgroud) 我有一个模板,允许用户编辑他们的用户信息.
<form method="post">
<table>
<tr>
<td>Username:</td>
<td>{{user['username']}}</td>
</tr>
<tr>
<td>New Password:</td>
<td> <input type="password" name="password"></td>
<td>{% if form.password.errors %} {{form.password.errors}} {% endif %}<td>
</tr>
<tr>
<td>Re-enter Password:</td>
<td> <input type="password" name="confirm_password">
</td>
</tr>
<input type='hidden' name='username' value="{{user['username']}}">
<tr>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
Run Code Online (Sandbox Code Playgroud)
我还有一个用于处理用户编辑的视图功能.我目前使用的数据库是带有MongoKit模块的MongoDB.到目前为止,我只能在视图功能中做到这一点,但没有运气.
def edit():
username = request.args.get('user')
user = User.find_one({'username':username}) # Is this a correct way of doing it?
form = UserForm(**what should be placed here?**, obj=user)
if request.method == 'POST' and form.validate(): …
Run Code Online (Sandbox Code Playgroud) 我正在使用MongoKit对大量数据进行迭代.
在此过程中,我的光标变为无效,我正在获取
OperationFailure: cursor id '369397057360964334' not valid at server
我已经在邮件列表中读到了我可以将参数传递timeout=False
给.find()
方法,但PyMongo常见问题解答说我自己负责关闭游标.
但我没有在MongoKit中找到方法.
我需要手动关闭光标,如果是 - 我该怎么办?
我正在尝试使用Flask中的MongoKit连接并验证远程数据库主机(dotcloud,mongolabs等).连接到服务器似乎工作正常.但是我无法对数据库进行身份验证.据推测这应该工作:
from mongokit import Connection
connection = Connection(my_remote_host, my_remote_port)
connection.my_database.authenticate(my_admin_user, my_admin_password)
Run Code Online (Sandbox Code Playgroud)
对authenticate()的调用返回True,但后续调用获取数据抛出:
OperationFailure: database error: unauthorized db
Run Code Online (Sandbox Code Playgroud)
有人知道这里会发生什么吗?
我正在使用 docker-compose 创建一个多容器环境,其中我有一个 mongodb 实例和两个 python 应用程序。问题是,第一个应用程序能够建立到 mongodb 的连接,而第二个应用程序失败并出现以下错误:
File "/usr/local/lib/python2.7/site-packages/pymongo/mongo_client.py",
line 377, in __init__ notification_1 |
raise ConnectionFailure(str(e)) notification_1 |
pymongo.errors.ConnectionFailure: [Errno -2] Name or service not known
Run Code Online (Sandbox Code Playgroud)
我的项目结构:
.
??? docker-compose.yml
??? form
? ??? app.py
? ??? Dockerfile
? ??? requirements.txt
? ??? static
? ??? templates
? ??? form_action.html
? ??? form_sumbit.html
??? notify
? ??? app.py
? ??? Dockerfile
? ??? requirements.txt
??? README
Run Code Online (Sandbox Code Playgroud)
这是我的[更新] docker-compose.yml 文件:
version: '3'
services:
db:
image: mongo:3.0.2
container_name: …
Run Code Online (Sandbox Code Playgroud)