日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PYMODM使用记录

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PYMODM使用记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PYMODM使用TIPS

  • ListField存儲其他文檔的引用列表時,可以這樣定義:

    class MongoPaper(MongoModel):"""mongo試卷"""paper_id = fields.IntegerField(verbose_name='sql試卷pk', primary_key=True)outlines = fields.ListField(field=fields.ReferenceField(Outline), verbose_name='提綱', blank=True)

    可以直接為outlines字段賦值:

    m_paper = MongoPaper(paper_id=123, outlines=['5cbdaf60f4880d0cd8a77ee0', '5cbdb25ef4880d4de4f32fe1', '5cbd8d03f4880d5d543c3263'])# 保存時,會自動將列表中的_id字符串轉化為ObjectId對象 if m_paper.is_valid():m_paper.save()
  • 如果要插入子文檔,利用to_son()方法,將model轉化為son對象,或者直接用字典字段。

  • MongoModel實例的pk屬性,返回ObjectId對象

  • MongoModel中的ReferenceField字段,在mongo數據庫中存儲為ObjectId數據類型

  • QuerySet的only方法默認會返回_id, _cls字段

  • 如果在定義模型時,通過primary_key指定某個字段為主鍵,保存時可以使用該字段。但查詢時,仍然通過_id字段

  • 如果自定義A集合的主鍵為int,B集合中的文檔通過ReferenceField引用了A集合中的文檔,那么在MongoDB存儲中,引用字段類型是int而不是ObjectId,但是Pymodm依然可以自動解析引用:

    {"_id" : ObjectId("5cd23e44f4880d8c48cd29a5"),"status" : 0,"score" : 19,"cost_time" : 3600,"submit_time" : 1557282372,"answer_sheet" : [ {"user_answer" : "C","is_correct" : 2,"points" : 0,"exercise" : ObjectId("5cb99660f4880d50385dfeff"),"outline_index" : 1,"exercise_index" : 1,"type" : 0,"model" : 0,"is_child" : false,"parent" : null,"score" : 2}, ],"user_id" : 1062,"paper" : 11, // 引用paper"_cls" : "api_service.models.UserPaper" } print(user_paper.paper.name) # 第一次模擬測試
  • EmbeddedMongoModel子文檔的Meta屬性,也可以設定final=True,來禁止生成_cls字段

  • 如果已經針對某個集合建立了索引,修改該索引時提示索引已存在,需要先刪除舊的索引。

  • mongoDB的默認主鍵是ObjectId對象,是一個24位的16進制字符串,其中前4位表示時間,在python中可以通過調用該對象的generation_time屬性來獲取,源碼如下:

    @property def generation_time(self):"""A :class:`datetime.datetime` instance representing the time ofgeneration for this :class:`ObjectId`.The :class:`datetime.datetime` is timezone aware, andrepresents the generation time in UTC. It is precise to thesecond."""timestamp = struct.unpack(">i", self.__id[0:4])[0]return datetime.datetime.fromtimestamp(timestamp, utc)
  • pymodm會自動請求ReferenceField字段引用的對象(除非在no_auto_dereference上下文中):

    print(isinstance(exercise.parent, MongoModel)) # True

    但是如果調用to_son().to_dict()方法后,這種引用不復存在。

  • 獲取MongoModel表的所有字段:

    MongoModel._mongometa.get_fields() # 由field對象組成的列表 # field對象的attname屬性可以獲取具體的字段名 [field_obj.attname for field_obj in type(model_obj)._mongometa.get_fields()]
  • pymodm如果解析到引用列表,會自動請求列表中的每個引用對象(包括打印時)。

  • 設置某字段的blank=True屬性后,保存文檔時,如果該字段未賦值,那么文檔在MongoDB數據庫中的存儲不含該字段。但是在獲取文檔對象該字段的值時,并不會報AttributeError,而是返回None

  • project指定文檔的返回字段時,不能指定ReferenceField引用文檔的具體字段。

總結

以上是生活随笔為你收集整理的PYMODM使用记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。