我有一个函数,它将从网站读取数据,处理它,然后将其加载到MongoDB中.当我在没有线程的情况下运行它时工作正常但是一旦我设置芹菜任务只调用这个函数我经常得到以下错误:"OperationFailure:数据库错误:未经授权的db:dbname锁类型:-1"
这有点奇怪,因为如果我在多个终端上运行非芹菜版本,我根本不会得到这个错误.
我怀疑它与没有与Mongo的开放连接有关,尽管在我的代码中我在每个Mongo呼叫之前打开一个.
确切的例外情况如下:
Task twitter[a974bfcc-d6ca-4baf-b36f-cae9143ce2d9] raised exception: OperationFailure(u'database error: unauthorized db:data lock type:-1 client:68.193.49.9',)
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/celery/execute/trace.py", line 36, in trace
return cls(states.SUCCESS, retval=fun(*args, **kwargs))
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/celery/app/task/__init__.py", line 232, in __call__
return self.run(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/celery/app/__init__.py", line 172, in run
return fun(*args, **kwargs)
File "/djangoblog/network/tasks.py", line 40, in twitter
n_twitter.GetTweetsTwitter(user)
File "/djangoblog/network/twitter.py", line 255, in GetTweetsTwitter
id = SaveTweet(user, network, tweet)
File "/djangoblog/network/twitter.py", line 150, in SaveTweet
if mmo.Moment.objects(user=user.id,source_id=id,network=network.id).count() == 0:
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/mongoengine/queryset.py", line 933, …Run Code Online (Sandbox Code Playgroud) 我有一些非常简单的代码:
from mongoengine import *
class Comment(Document):
id = IntField(primary_key=True)
text = StringField()
class Message(Document):
id = IntField(primary_key=True)
comments = ListField(ReferenceField(Comment))
connect('test_db')
c1 = Comment(id=1)
c1.text = 'message_one'
c1.save()
c2 = Comment(id=2)
c2.text = 'message_two'
c2.save()
m = Message(id=1)
m.comments = [c1, c2]
m.save()
msg = Message.objects.get(id=1)
for comment in msg.comments:
print comment.id, comment.text
Run Code Online (Sandbox Code Playgroud)
我期望它将打印
1个message_one
2个message_two
但是我有
1个message_one
1个message_one
当我使用任何mongodb管理界面查看数据库时,一切似乎都正常:
{“ _cls”:“消息”,“ _id”:1,“ _types”:[“消息”],
“ comments”:[{{“ $ ref”:“ comment”,“ $ id”:1},{“ $ ref”:“ comment”,“ $ id”:2}]}
我试图在代码中交换c1和c2(例如,使用m.comments = [c2,c1]),但出乎意料的是,我得到了正确的输出: …
我正在尝试使用factory_boy帮助为我的测试生成一些MongoEngine文档.我在定义EmbeddedDocumentField对象时遇到了麻烦.
这是我的MongoEngine Document:
class Comment(EmbeddedDocument):
content = StringField()
name = StringField(max_length=120)
class Post(Document):
title = StringField(required=True)
tags = ListField(StringField(), required=True)
comments = ListField(EmbeddedDocumentField(Comment))
Run Code Online (Sandbox Code Playgroud)
这是我部分完成的factory_boy Factory:
class CommentFactory(factory.Factory):
FACTORY_FOR = Comment
content = "Platinum coins worth a trillion dollars are great"
name = "John Doe"
class BlogFactory(factory.Factory):
FACTORY_FOR = Blog
title = "On Using MongoEngine with factory_boy"
tags = ['python', 'mongoengine', 'factory-boy', 'django']
comments = [factory.SubFactory(CommentFactory)] # this doesn't work
Run Code Online (Sandbox Code Playgroud)
任何想法如何指定comments字段?问题是工厂男孩试图创建CommentEmbeddedDocument.
我在MongoDB中有一个Organization数据库.我正在尝试使用该数据库保存数据mongoengine.我正在使用Djnago服务器.当我创建对象然后它的工作正常但在编辑后给出了一些错误.
class Organization(Document):
username= StringField()
ancestors = ListField(ReferenceField('Organization',dbref=False), default = list)
parents = ListField(ReferenceField('Organization',dbref=False),default = list)
descendants = ListField(ReferenceField('Organization',dbref=False), default = list)
obj1 = Organization(username = 'kousik')
obj1.save()
<Organization: Organization object> #obj1 created
obj2 = Organization(username = 'chowdhury',ancestors = [obj1],parents=[obj1])
obj2.save()
<Organization: Organization object> #obj2 created
obj3 = Organization(username = 'kchowdhury',ancestors = [obj1,obj2],parents=[obj2])
obj3.save()
<Organization: Organization object> #obj3 creaed
obj1.descendants = [obj2,obj3]
obj1.save()
<Organization: Organization object> #obj1 updated
obj2.descendants = [obj3]
obj2.save()
Traceback (most recent call …Run Code Online (Sandbox Code Playgroud) 所以我所追求的是:
class Comment(EmbeddedDocument):
content = StringField()
upvotes = IntField()
pub_date = DateTimeField()
class Post(Document):
title = StringField()
comments = SortedListField(EmbeddedDocumentField(Comment))
post_date = DateTimeField()
Run Code Online (Sandbox Code Playgroud)
默认情况下,这按照评论提交的时间顺序排序,但我想SortedListField按upvotes嵌入的评论文档的属性进行排序.这是可能的,如果是这样,我该怎么做呢?
首先,我是python和flask的新手。我四处搜寻并尝试了一些无济于事的事情。我有一个具有DateTimeField作为成员之一的模型,我们称它为“ created_at”。当我返回查询集为JSON时,我在字段中看到了这一点
...
"created_at": {
"$date": 1412938697488
}
...
Run Code Online (Sandbox Code Playgroud)
无论如何,是否有通过自定义JSON编码器等获取输出的方式,如下所示:
"created_at": "2014-10-10T07:33:04Z",
Run Code Online (Sandbox Code Playgroud)
任何指导或建议,将不胜感激。
谢谢!
我正在使用mongoengine 0.9.0
class EntityChange(Document):
...
old_data = DictField()
new_data = DictField()
Run Code Online (Sandbox Code Playgroud)
我想将dict对象保存到old_data和new_data.
为什么字段BaseList在转让后成为现实?
data = {u'int_id': 100500, u'_cls': 'BuildingKind', ...}
instance = EntityChange()
instance.new_data = data
# after that
# isinstance(instance, BaseList) is True
# isinstance(instance, BaseDict) is False
# instance.new_data == ['int_id', 'id', ...] is True. why?
Run Code Online (Sandbox Code Playgroud) 我想用category值过滤数据,但我不知道如何做到这一点mongoengine.
我尝试:
data = Data.objects.exclude(category="").order_by('-datetime')[:500]
Run Code Online (Sandbox Code Playgroud)
但得到错误:
exclude() got an unexpected keyword argument 'category'
Run Code Online (Sandbox Code Playgroud)
我没有在文档中找到方法,你是怎么做到的?
我需要在mongoengine中查询包含所有嵌入文档的列表.这是我的架构:
class Variant(EmbeddedDocument):
name = StringField(required=True)
value = StringField(required=True)
class Sku(Document):
variants = ListField(EmbeddedDocumentField(Variant))
Run Code Online (Sandbox Code Playgroud)
我可以用mongo shell做到:
db.sku.find({variants: [{'name': 'xxx', 'value': 'xxx'}]}).pretty()
Run Code Online (Sandbox Code Playgroud)
但是我还没想办法在mongoengine中做到这一点.我需要文档中的列表与我在查询中放入的列表完全相同.有任何想法吗?
我试图用mongoengine和烧瓶从mongodb中获取数据.查询是完美的工作问题是当我将查询结果转换为json时,它只显示字段名称.
这是我的代码
view.py
from model import Users
result = Users.objects()
print(dumps(result))
Run Code Online (Sandbox Code Playgroud)
model.py
class Users(DynamicDocument):
meta = {'collection' : 'users'}
user_name = StringField()
phone = StringField()
Run Code Online (Sandbox Code Playgroud)
产量
[["id", "user_name", "phone"], ["id", "user_name", "phone"]]
Run Code Online (Sandbox Code Playgroud)
为什么它只显示字段名称?
mongoengine ×10
python ×8
mongodb ×7
django ×3
flask ×2
celery ×1
dictionary ×1
factory-boy ×1
json ×1
pymongo ×1
python-3.x ×1