Приложение Flask: AttributeError: объект «NoneType» не имеет атрибута «getconn» при использовании пула соединений с psycPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Приложение Flask: AttributeError: объект «NoneType» не имеет атрибута «getconn» при использовании пула соединений с psyc

Сообщение Anonymous »

Я новичок в разработке Flask и потратил много часов на разработку своего приложения, но не могу связать свою базу данных с приложением.
Я постоянно получаю эту ошибку :
AttributeError
AttributeError: у объекта «NoneType» нет атрибута «getconn»
Я инициализировал пул соединений, который создается успешно, но когда я пытаюсь для запроса к базе данных, я получаю эту ошибку. Я без проблем протестировал запрос к базе данных из командной строки и проверил статус своего экземпляра RDS, который был «доступен».
Это мой маршрут входа:

Код: Выделить всё

@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']

authenticated, user_to_login = authenticate_user(username, password)

if authenticated:
login_user(user_to_login)

# Redirect based on role
if user_to_login.role == 'admin':
return redirect(url_for('adminPage'))
elif user_to_login.role == 'client':
return redirect(url_for('Clientpage'))
elif user_to_login.role == 'manager':
return redirect(url_for('managerPage'))
else:
return render_template('login.html')

else:
return render_template('login.html', error='Invalid username or password')

return render_template('login.html')
Вот как я инициализирую пул соединений:

Код: Выделить всё

def init_db(targetDbName):
global connection_pool
db_credentials = get_secret() #tested function, which retireves correct values

USERNAME = db_credentials['username']
PASSWORD = db_credentials['password']
HOST = 'localhost' #since I am in dev
PORT = db_credentials['port']

connection_pool = psycopg2.pool.SimpleConnectionPool(
minconn=1,
maxconn=10,
user=USERNAME,
password=PASSWORD,
host=HOST,
port=PORT,
database=targetDbName #the name is correct
)
И, наконец, функция аутентификации, используемая в логике входа:

Код: Выделить всё

def authenticate_user(username, password):

try:

conn = connection_pool.getconn()
cursor = conn.cursor()

select_query = """
SELECT id, password, role FROM users WHERE username = %s
"""
cursor.execute(select_query, (username,))
user = cursor.fetchone()

if user:
id, db_password_hash, db_role = user

if check_password_hash(db_password_hash, password):
print("Success.")
print(id)
print(db_role)

user_to_login = User(id, username, db_role)
return True, user_to_login
else:
print("Wrong password.")
return False, None
else:
print("User not found.")
return False, None

except Exception as e:
print(f"Error: {e}")
return False, None

finally:
cursor.close()
conn.close()`
ПРИМЕЧАНИЕ. Я также пытался инициализировать conn и курсор как None, но в этом случае я получаю ошибку, поскольку они равны None.
Спасибо за заранее за вашу помощь!

Подробнее здесь: https://stackoverflow.com/questions/791 ... n-when-usi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»