Как я могу использовать функцию find () в Pymongo, чтобы проверить, существует ли имя пользователя в моей коллекции userCollection? - PullRequest
0 голосов
/ 24 января 2019

Я только начал учиться программировать пару дней назад, и я решил создать программу регистрации / аутентификации на Python, используя внешнюю базу данных для моего первого проекта. Я использую MongoDB с Pymongo для хранения информации, которая была введена во время процесса, в одном, случайно сгенерированном _id. Вот проблемная область:

##Username##
print('Choose A Unique Username')
time.sleep(1.2)
unameInput = input("Enter Username: ")
unameList = {'Username': unameInput}
unameQuery = {'Username': 'k'}
unameQuery2 = userCol.find_one(unameQuery)
if unameInput == unameQuery2:
    print('Name is Available | Accepted!')
else:
    print('Sorry, Please Try Again.'

Кажется, я не могу найти способ выполнить запрос для поиска по всей коллекции (userCol), используя определенный ключ в списках моего словаря.

Я только попробовал варианты метода, который использовал, и он никогда не возвращает ошибок, но он переходит к другому: утверждение

from pymongo import MongoClient
import time
import sys
import getpass
import json

client = MongoClient('localhost', 27017)
loginDB = client["loginDB"]
userCol = loginDB["userCol"]


##Write to DBs##
print('New User Form')
time.sleep(1.2)
fnameInput = input("First Name: ")
lnameInput = input("Last Name: ")
namesList = {'First Name:': fnameInput, 'Last Name:': lnameInput}
("Thank you, " + fnameInput + lnameInput)

if fnameInput != lnameInput:
    print('Name Accepted')
else:
    print('Sorry, Please Try Again.')

##Email##

print("Email Validation")
time.sleep(1.2)
emailInput = input("Email Address: ")
time.sleep(1)
retypeEmail = input("Confirm Email: ")
time.sleep(1)
print("Is " + retypeEmail + " correct?")
confirmEmail = input("Yes/No: ")
emailList = {'Email': retypeEmail}

if confirmEmail == "Yes" and emailInput == retypeEmail:
    print("Verifying Email...")
    time.sleep(1)
    print("Verifying Email.....")
    time.sleep(1.55)
    print(emailInput + ' Verified!')
else:
    print('Please re-enter your Email...')
    time.sleep(1.5)
    time.sleep(1)

##Username##
print('Choose A Unique Username')
time.sleep(1.2)
unameInput = input("Enter Username: ")
unameList = {'Username': unameInput}
unameQuery = {'Username': 'k'}
unameQuery2 = userCol.find_one(unameQuery)
if unameInput == unameQuery2:
    print('Name is Available | Accepted!')
else:
    print('Sorry, Please Try Again.')


print('Choose A Password')
time.sleep(1.2)
pswInput = input("Enter Password: ")
pswVerify = input("Verify Your Password: ")
pswList = {'Username': pswVerify}
allList = {'Name': namesList, 'Email': emailList, 'Username': unameList, 'Password': pswList}

if pswInput == pswVerify:
    print('Passwords Match | Accepted!')
    time.sleep(1)
else:
    print('Sorry, Please Try Again.')

print('Are you sure you want to create this account, ' + fnameInput + '?')
createAccount = input('Y/N')
if createAccount == 'Y' or 'y' or 'yes' or 'Yes':
    print('Creating Account, Please Wait...')
    time.sleep(.5)
    print('Writing Info To Database...')
    time.sleep(1.6)
    userCol.insert_one(allList)
    print('Account Created, Thank You!')

Я хочу, чтобы результат функции ## Username ## проверил коллекцию в MongoDB, чтобы увидеть, есть ли имя пользователя, которое уже было создано. Если имя пользователя уже создано, снова запустите функцию в ## Usernmae ##. Если этого не произошло, примите ввод и запустите функцию пароля.

Я также понимаю, что у меня нет никаких петель на месте, перезапустите функцию. Я запускал его несколько раз без них, и, похоже, это не должно мешать выполнению запроса, к счастью

...