MongoDB Atlas의 데이터베이스에서 읽고 쓰려고하는데 컬렉션에서 데이터를 읽을 수는 있지만 컬렉션에 쓰려고하면 PyMongo가 예외 'name은 (는) str의 인스턴스 여야합니다.'PyMongo - 이름이 Str의 인스턴스 여야합니다.
MongoClient 객체를 참조하는 것으로 추측하고 있지만 연결 문자열을 사용하고 있습니다. 누구든지 내가 뭘 잘못하고있는 걸 도와 줄 수 있니? 다음과 같이
내 코드는 다음과 같이
def setattributes(self, rowdict):
""" a function to create a user. Assumes that only a data
dict is provided. strips everything else and updates.
what the data dict contains is your problem.
"""
with UseDatabase(self.dbconfig) as db:
collection = db.database[self.tablename]
locationdict = { #create a corresponding location entry
'email' : rowdict['email'],
'devstate' : 0,
'location' : {
'type': 'Point',
'coordinates' : [ 0, 0 ]
},
'lastseen' : datetime.now()
}
try:
res = db.insertdata(collection, rowdict) #insert user data
except Exception as e:
print("Error adding user to DB : %s" % e)
return False # if you cant insert, return False
try:
loccollection = db.database[self.locationtable]
resloc = db.insertdata(loccollection, locationdict)
except Exception as e: # if the status update failed
db.collection.remove({'email' : rowdict['email']})
#rollback the user insert - atomicity
return False
return True
내 데이터베이스 코드입니다 (I 나를 더 잘 이해하는 데 도움 코멘트 톤, 그래서 간결의 부족을 용서하시기 바랍니다있어) :
당신에class ConnectionError(Exception):
pass
class CredentialsError(Exception):
pass
class UseDatabase:
def __init__(self, config: dict):
self.config = config
def __enter__(self, config = atlas_conn_str):
try:
self.client = MongoClient(config)
self.database = self.client['reviv']
return self
except:
print("Check connection settings")
raise ConnectionError
def __exit__(self, exc_type, exc_value, exc_traceback):
self.client.close()
def insertdata(self, collection, data):
post = data
post_id = self.database[collection].insert_one(post).inserted_id
return post_id
def getdetails(self, collection, emailid):
user = collection.find_one({'email' : emailid}, {'_id' : 0})
return user
고맙습니다. 귀하의 제안으로 인해 효과가있었습니다. 또한 데이터베이스 클래스를 이동하고 메인 스레드 자체에서 연결을 구현하는 것에 대한 조언을 듣고 있습니다.이 클래스는 연결 풀링과 함께 MariaDB를 사용하는 이전 버전의 응용 프로그램에서 남은 것입니다. 다시 한번 고마워요. :) – kilokahn