Я пытаюсь погрузиться в разработку веб-приложений. Я работаю над простым приложением, которое позволяет людям зарегистрироваться, создать учетные данные пользователя, а затем заполнить список участников. Сейчас у меня проблемы с добавлением новых пользователей в базу данных MySQL. Когда я выбираю нужную базу данных, я использую SHOW CREATE PROCEDURE, и моя процедура печатается в терминале. Однако, когда я запускаю свое приложение и тестирую регистрацию - консоль браузера продолжает говорить:
"{" error ":" (1305, u'PROCEDURE tbl_user.sp_createUser не существует ') "}.
Я вижу это в терминале, но не могу заставить мое приложение найти его. Я подозреваю, что хранимая процедура находится в неправильной базе данных, но я не могу найти четких инструкций о том, как подтвердить, в какой БД находится моя процедура.
Я пытался просмотреть все базы данных, которые у меня есть. Я даже попытался сбросить соединение и убедиться, что могу найти процедуру в терминале, прежде чем пытаться протестировать свое приложение. Я нахожу его, но не могу заставить мое приложение работать.
Код приложения Python:
'''python
mysql = MySQL()
#MySQL configurations
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'peace2you'
app.config['MYSQL_DATABASE_DB'] = 'BucketList'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
@app.route("/")
def main():
return render_template('index.html')
@app.route("/showSignup")
def showSignup():
return render_template('signup.html')
@app.route("/signUp",methods=['POST','GET'])
def signUp():
try:
# read the posted values from the UI
_name = request.form['inputName']
_email = request.form['inputEmail']
_password = request.form['inputPassword']
if _name and _email and _password:
#all good, lets call MySQL
with closing(mysql.connect()) as conn:
with closing(conn.cursor()) as cursor:
_hashed_password = generate_password_hash(_password)
cursor.callproc('tbl_user.sp_createUser',(_name,_email,_hashed_password))
data = cursor.fetchall()
if len(data) is 0:
conn.commit()
return json.dumps({'message':'User created successfully !'})
else:
return json.dumps({'error':str(data[0])})
else:
return json.dumps({'html':'<span>Enter the required fields</span>'})
except Exception as e:
return json.dumps({'error':str(e)})
'''
'''mysql from commandline
show create procedure `tbl_user.sp_createUser`
-> ;
+------------------------+-----------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Procedure | sql_mode | Create Procedure | character_set_client | collation_connection | Database Collation |
+------------------------+-----------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| tbl_user.sp_createUser | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` PROCEDURE `tbl_user.sp_createUser`(
IN p_name VARCHAR(20),
IN p_username VARCHAR(20),
IN p_password VARCHAR(20)
)
BEGIN
if ( select exists (select 1 from tbl_user where user_username = p_username) ) THEN
select 'Username Exists !!';
ELSE
insert into tbl_user
(
user_name,
user_username,
user_password
)
values
(
p_name,
p_username,
p_password
);
END IF;
END | utf8mb4 | utf8mb4_0900_ai_ci | utf8mb4_0900_ai_ci |
+------------------------+-----------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)
'''
Я ожидаю, что на консоли будет отображаться «Пользователь успешно создан», но я продолжаю получать:
{"error": "(1305, u'PROCEDURE tbl_user.sp_createUser не существует ')"}.
Любая помощь или понимание, которое вы могли бы оказать, было бы фантастическим! Спасибо