Guest User

Untitled

a guest
Dec 1st, 2017
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.86 KB | None | 0 0
  1. # coding:utf-8
  2. # @author cloudy <liufuyun88@gmail.com>
  3. # @created Wed Nov 29 2017 14:58:52 GMT+0800 (CST)
  4.  
  5. import mongoengine as me
  6.  
  7. me.connect(db="test")
  8.  
  9.  
  10. class User(me.Document):
  11. email = me.StringField(required=True, unique=True)
  12. first_name = me.StringField(max_length=50)
  13. last_name = me.StringField(max_length=50)
  14. age = me.IntField()
  15.  
  16. # validation rule
  17. def clean(self):
  18. pass
  19.  
  20.  
  21. class Comment(me.EmbeddedDocument):
  22. content = me.StringField()
  23. name = me.StringField(max_length=30)
  24.  
  25.  
  26. class Post(me.Document):
  27. title = me.StringField(required=True, default="no title")
  28. author = me.ReferenceField(User, reverse_delete_rule=me.CASCADE)
  29. tags = me.ListField(me.StringField(max_length=50))
  30. comments = me.ListField(me.EmbeddedDocumentField(Comment))
  31.  
  32. meta = {'allow_inheritance': True, 'collection': 'post'}
  33.  
  34.  
  35. class TextPost(Post):
  36. content = me.StringField()
  37.  
  38.  
  39. class ImagePost(Post):
  40. image_path = me.StringField()
  41.  
  42.  
  43. class LinkPost(Post):
  44. link_url = me.StringField()
  45.  
  46.  
  47. class Article(me.Document):
  48. tags = me.ListField(me.StringField())
  49.  
  50.  
  51. if __name__ == '__main__':
  52. # 保存1
  53. # ross = User(
  54. # email="test@moresec.cn", first_name="wu", last_name="tian").save()
  55.  
  56. # 保存2
  57. # ross = User(email="test@moresec.cn")
  58. # ross.first_name = "Ross"
  59. # ross.last_name = "Lawley"
  60. # ross.save()
  61. # ross.first_name = "Like"
  62. # ross.save()
  63.  
  64. # 保存3
  65. # post1 = TextPost(title='Fun with MongoEngine', author=ross)
  66. # post1.content = 'Took a look at MongoEngine today, looks pretty cool.'
  67. # post1.tags = ['mongodb', 'mongoengine']
  68. # post1.save()
  69.  
  70. # 读取
  71. # for user in User.objects:
  72. # print type(user.id)
  73.  
  74. # for user in User.objects(email='test@moresec.cn'):
  75. # print user
  76.  
  77. # nums
  78. # print User.objects(email="test@moresec.cn").count()
  79.  
  80. # user = User.objects(email="cloudy@moresec.cn").get()
  81. # print user
  82. # find
  83. # print Post.objects(author=user).get()
  84.  
  85. # Find all pages Bob authored
  86. # authors是个list
  87. # Page.objects(authors__in=[bob])
  88.  
  89. # Find all pages that both Bob and John have authored
  90. # Page.objects(authors__all=[bob, john])
  91.  
  92. # Remove Bob from the authors for a page.
  93. # Page.objects(id='...').update_one(pull__authors=bob)
  94.  
  95. # Add John to the authors for a page.
  96. # Page.objects(id='...').update_one(push__authors=john)
  97. # User(email="test@moresec.cn", first_name="hello", last_name="fuck").save()
  98. # me.errors.DoesNotExist
  99.  
  100. # 保存时可以避免校验
  101. # recipient.save(validate=False)
  102.  
  103. # print User.objects.first()
  104. # print User.objects.order_by("+email").first()
  105.  
  106. #主键
  107. # page.id == page.pk
  108.  
  109. # field on embedded documents
  110. # uk_pages = Page.objects(author__country='uk')
  111. # print User(email="fuck@moresec.cn", first_name="do", last_name="dajo", age=23).save()
  112. # print User.objects.sum('age')
  113. # print User.objects.average('age')
  114. # article = Article()
  115. # article.tags = ['aaa', 'bbb', 'ccc', 'bb']
  116. # article.save()
  117.  
  118. # 统计词汇云
  119. # tag_freqs = Article.objects.item_frequencies('tags', normalize=False)
  120. # print tag_freqs
  121. # from operator import itemgetter
  122. # top_tags = sorted(tag_freqs.items(), key=itemgetter(1), reverse=True)[:10]
  123. # print top_tags
  124.  
  125. # 优化获取
  126. # user = User.objects.only("email").first()
  127. # print user.email
  128.  
  129. # user = User.objects.exclude('email').first()
  130. # print user.first_name
  131.  
  132. # 间接引用
  133. post = Post.objects.first()
  134. print post.author.first_name
  135.  
  136. # 这个api还是存疑
  137. # post = Post.objects.select_related(max_depth=0)[0]
  138. # print post.author
  139. # print post.author
  140.  
  141. # post = Post.objects.no_dereference().first()
  142. # print post.author
  143.  
  144. # 这个用法也存疑,me 没有no_dereference
  145. # with me.no_dereference(Post) as Post:
  146. # post = Post.objects.first()
  147. # print post.author
Add Comment
Please, Sign In to add comment