Я пытаюсь добавить новых пользователей в таблицу MySQL при их регистрации. Я использую FlaskApp на PythonAnywhere.
Вот мой запрос:
INSERT INTO user_profile (email, user_name, first_foo) VALUES (%s, %s, 0);
Это запускается из моего кода flask_app:
def connect_db(query, params):
db_connection= MySQLdb.connect("<username>.mysql.eu.pythonanywhere-services.com","<username>","<password","<db_name>", cursorclass=MySQLdb.cursors.DictCursor)
cursor=db_connection.cursor()
cursor.execute(query, params)
result = cursor.fetchone()
return result
connect_db(query, (email, username,))
Вот моя структура таблицы:
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| user_id | int | NO | PRI | NULL | auto_increment |
| email | varchar(50) | YES | UNI | NULL | |
| user_name | varchar(15) | YES | UNI | NULL | |
| first_foo | tinyint(1) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
К сожалению, я продолжаю получать:
MySQLdb._exceptions.OperationalError: (1048, "Column 'user_id' cannot be null")
Я попробовал несколько запросов, в том числе:
INSERT INTO user_profile (user_id, email, user_name, first_foo) VALUES (NULL, %s, %s, 0);
INSERT INTO user_profile (user_id, email, user_name, first_foo) VALUES (DEFAULT, %s, %s, 0);
INSERT INTO user_profile (user_id, email, user_name, first_foo) VALUES (0, %s, %s, 0);
но все возвращают одну и ту же ошибку.
Если я запускаю первый запрос в консоли MySQL на Python Anywhere, запрос будет успешным.
Заранее спасибо за любую помощь.
@Woodford Спасибо, что заглянули. Я только что добавил код Python.
Вы уверены, что используете именно тот код Python? Попробуйте добавить что-нибудь очевидное, например, отпечаток, чтобы быть уверенным на 100%.
попробуйте добавить это db_connection.commit()
после cursor.execute(query,params)
никогда не угадаешь.
Первый запрос в вашем вопросе будет работать в MySQL. Если вы получили сообщение об ошибке в своем вопросе, то вы либо не выполняете этот запрос, либо выполняете его в другой таблице.
гораздо лучше показать структуру таблицы, используя show create table user_profile
; это дает нам гораздо больше информации. ваш первый запрос — правильный способ сделать это; похоже, что вы используете не ту версию своего кода, о которой думаете, или ваш код Python не подключается к базе данных или серверу, на котором находится ваша консоль.
Спасибо всем за ваш вклад. У меня действительно есть оператор печати в этой функции (я просто удалил его при публикации, чтобы его было легче читать). Я использую эту функцию в другом запросе и знаю, что она определенно работает. @DerekRoberts - добавление коммита сработало!!!! Большое спасибо!!! Меня всегда так удивляет, что малейшее дополнение может решить всё!! Вы хотите поставить это как ответ, и тогда я смогу его принять?
@NucyLoodle потрясающе!!!
ох @NucyLoodle, пожалуйста, я также добавил это в качестве ответа, чтобы, если кому-то понадобится помощь с такого рода вопросом, было легче найти ответ.
к сожалению, мой английский не очень хорош, но. Правильно ли вы объявили, что столбец автоматически увеличивается?
Эту проблему можно решить, указав, с какого значения будет начинаться приращение:
ALTER TABLE YourTableName MODIFY user_id INT NOT NULL AUTO_INCREMENT;
Структура таблицы в вопросе показывает, что это auto_increment. А если бы это было не так, INSERT INTO user_profile (user_id, email, user_name, first_foo) VALUES (0, %s, %s, 0);
сработало бы.
Из комментария ОП это сработало,
после каждой транзакции, такой как запросы INSERT
, UPDATE
, DELETE
, добавление commit()
имело решающее значение после execute()
.
cursor = db_connection.cursor()
cursor.execute(query, params)
db_connection.commit() # <- add this
Не могли бы вы отредактировать свой вопрос, включив в него код Python, который выполняет ваш SQL-запрос?