Как ВСТАВИТЬ в таблицу с помощью AUTO_INCREMENT?

Я пытаюсь добавить новых пользователей в таблицу 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, запрос будет успешным.

Заранее спасибо за любую помощь.

🤔 А знаете ли вы, что...
С Python можно создавать роботов и автоматизированные системы с использованием библиотеки Raspberry Pi.


3
50
2

Ответы:

к сожалению, мой английский не очень хорош, но. Правильно ли вы объявили, что столбец автоматически увеличивается?

Эту проблему можно решить, указав, с какого значения будет начинаться приращение:

ALTER TABLE YourTableName MODIFY user_id INT NOT NULL AUTO_INCREMENT;

Решено

Из комментария ОП это сработало, после каждой транзакции, такой как запросы INSERT, UPDATE, DELETE, добавление commit() имело решающее значение после execute().

cursor = db_connection.cursor()
         cursor.execute(query, params)
         db_connection.commit()  #  <- add this

Интересные вопросы для изучения