Django: ошибка Raw sql INSERT INTO phpbb db: ошибка № 1062 Дублирующий ключ

Эй, у меня есть сигнал, когда создается пользователь django, я также вручную вставляю этого пользователя в таблицу phpbb. Код следующий:

@receiver(post_save, sender=User)
def user_created_signal(sender, **kwargs):
    if kwargs['created']:
        user = kwargs['instance']

        fields = {
            'username': str(user.username),
            'username_clean': str(user.username),
            'user_password': "",
            'user_email': str(user.email),
            'group_id': 7,
            'user_timezone': 0,
            'user_dst': "",
            'user_lang': "sv",
            'user_type': 0,
            'user_actkey': "",
            'user_ip': "",
            'user_regdate': "",
            'user_inactive_reason': "",
            'user_inactive_time': "",
            'user_permissions': 0,
            'user_sig': "",
            'user_form_salt': "gg54jhg345",
        }
        cursor = connection.cursor()

        # Add user to phpbb

        try:

            cursor.execute("INSERT INTO spelutveckla_se.phpbb_users " + str(tuple(fields.keys())).replace("'", "") + " VALUES" + str(tuple(fields.values())))

        except Warning:
            pass

Я продолжаю получать это сообщение об ошибке: (1062, «Повторяющаяся запись« test_username »для ключа« username_clean »»)

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

Вот SQL:

"ВСТАВИТЬ В spelutveckla_se.phpbb_users (имя пользователя, часовой_зона пользователя, user_form_salt, username_clean, user_dst, user_lang, user_password, user_sig, user_type, user_actkey, user_ip, user_permissions, user_regdate, group_id, user_inactive_reason, user_email, user_inactive_time) VALUES('test_username', 0, ' gg54jhg345', 'test_username', '', 'sv', '', '', 0, '', '', 0, '', 7, '', '[email protected]', '')

Пожалуйста помоги!! Спасибо.


person mrmclovin    schedule 13.02.2011    source источник
comment
У вас проблема с автоинкрементом. Даже когда вы удаляете самую новую строку, автоинкремент начинается с 1+последней строки. Это по дизайну. Для получения дополнительной информации: stackoverflow.com/questions/2214141/< /а> . Вторая запись в списке может быть вам полезна.   -  person KyleWpppd    schedule 13.02.2011


Ответы (1)


Я думаю, что у меня была похожая проблема. Я переместил код, добавляющий сигнал, в другой __init.py__ файл. Например из __init__ внутри вашего приложения, чтобы инициализировать файл в корневой папке проекта (или наоборот). Может быть, это поможет.

person damienix    schedule 13.02.2011
comment
Спасибо, это помогло! Вау, не могу поверить, что я трачу столько часов на это дерьмо :) - person mrmclovin; 14.02.2011