gpt4 book ai didi

python - 我可以将 mongodb 集合作为 python 中的类属性吗

转载 作者:可可西里 更新时间:2023-11-01 10:43:08 26 4
gpt4 key购买 nike

我有以下类(class):

import sys
import os
import pymongo
from pymongo import MongoClient

class Collection():

client = MongoClient()

def __init__(self, db, collection_name):
self.db = db
self.collection_name = collection_name

def getCollection(self):
data_base = getattr(self.client, self.db)
collObject = getattr(data_base, self.collection_name)
return collObject

def getIdFromEmail(self, email):
collection = self.getCollection()
id = collection.find_one({"email":email},{"_id":1})
return id

在编写 getIdFromEmail 时,我突然想到,每次我想从电子邮件中获取 id 时,我都会创建另一个集合对象。有没有一种方法可以让对象作为类的一部分创建一次,而不是每次我想编写查询时都创建一个?

最佳答案

您的集合需要 self.dbself.collection_name 才能初始化,所以我认为您不能将其设为类属性。我会在初始化 Collection 时执行所有这些操作:

class Collection():
def __init__(self, db, collection_name):
self.db = db
self.collection_name = collection_name

if not hasattr(self.__class__, 'client'):
self.__class__.client = MongoClient()

database = getattr(self.client, self.db)
self.collection = getattr(database, self.collection_name)

您还可以使用属性,使您的 Collection 尽可能晚地连接到 MongoDB:

class Collection():
def __init__(self, db, collection_name):
self.db = db
self.collection_name = collection_name

@property
def client(self):
if not hasattr(self.__class__, '_client'):
self.__class__._client = MongoClient()

return self.__class__._client

@property
def collection(self):
if not hasattr(self, '_collection'):
database = getattr(self.client, self.db)
self._collection = getattr(database, self.collection_name)

return self._collection

这些方法还具有在导入 Collection 时不连接到 MongoDB 的好处。

关于python - 我可以将 mongodb 集合作为 python 中的类属性吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com