一般来说,增删改查的测试可以作为一个流程,那么删除就要放到最后测,因此称为增查改删。

以数据集的增查改删除为例简单了解一下业务,通过数据库建表来了解我们需要的操作。

Mongodb的python mongoengine ORM建表

  1 # -*- coding: utf-8 -*-
  2 
  3 import datetime
  4 from flask_mongoengine import MongoEngine
  5 from mongoengine import signals
  6 import helper
  7 
  8 db = MongoEngine()
  9 
 10 
 11 class ProductAttribute(db.EmbeddedDocument):
 12     k = db.StringField(required=True, max_length=50)
 13     v = db.StringField(required=True, max_length=100)
 14 
 15     meta = {
 16         'indexes': [
 17             {
 18                 'fields': ['k', 'v'],
 19                 'unique': True
 20             }
 21         ]
 22     }
 23 
 24 
 25 class Dataset(db.Document):
 26     name = db.StringField(required=True, max_length=50)
 27     type = db.StringField(max_length=20)
 28     x_consumer_custom_id = db.StringField()
 29 
 30     description = db.StringField(max_length=500)
 31     status = db.StringField(required=True, max_length=50, default="created")
 32 
 33     created_at = db.DateTimeField(required=True, default=datetime.datetime.utcnow)
 34     updated_at = db.DateTimeField(required=True)
 35     deleted_at = db.DateTimeField(default=None)
 36 
 37     meta = {
 38         'indexes': [
 39             {
 40                 'fields': ['name', 'x_consumer_custom_id'],
 41                 'unique': True
 42             }
 43         ]
 44     }
 45 
 46     def to_dict(self):
 47         return helper.mongo_to_dict(self, [])
 48 
 49 
 50 class ImageItem(db.Document):
 51     image_id = db.StringField(required=True, max_length=50)
 52     uri = db.URLField()
 53     title = db.StringField(required=True, max_length=50)
 54 
 55     description = db.StringField(max_length=500)
 56     status = db.StringField(required=True, max_length=50, default="created")
 57 
 58     created_at = db.DateTimeField(required=True, default=datetime.datetime.utcnow)
 59     updated_at = db.DateTimeField(required=True)
 60 
 61     meta = {
 62         'indexes': [
 63             {
 64                 'fields': ['image_id'],
 65                 'unique': True
 66             }
 67         ]
 68     }
 69 
 70     def to_dict(self):
 71         return helper.mongo_to_dict(self, [])
 72 
 73 
 74 class ProductItem(db.Document):
 75     product_id = db.StringField(required=True, max_length=50)
 76     name = db.StringField(required=True, max_length=100)
 77     category = db.StringField(required=True, max_length=50)
 78 
 79     description = db.StringField(max_length=500)
 80     status = db.StringField(required=True, max_length=50, default="created")
 81     shelf = db.StringField(required=True, max_length=50, default="on")
 82 
 83     images = db.ListField(db.URLField())
 84 
 85     attributes = db.EmbeddedDocumentListField(ProductAttribute)
 86 
 87     created_at = db.DateTimeField(required=True, default=datetime.datetime.utcnow)
 88     updated_at = db.DateTimeField(required=True)
 89 
 90     meta = {
 91         'indexes': [
 92             {
 93                 'fields': ['product_id'],
 94                 'unique': True
 95             }
 96         ]
 97     }
 98 
 99     def to_dict(self):
100         return helper.mongo_to_dict(self, [])
101 
102 
103 def update_timestamp(sender, document, **kwargs):
104     document.updated_at = datetime.datetime.utcnow()
105 
106 signals.pre_save.connect(update_timestamp, sender=Dataset)
107 signals.pre_save.connect(update_timestamp, sender=ProductItem)
108 signals.pre_save.connect(update_timestamp, sender=ImageItem)
mongodb tables

相关文章: