Как устранить ошибку "Таблица уже существует" во Flask?

У меня проблема, я действительно не знаю, как подойти к ней с Python Flask. Для справки я использую SQL-Alchemy и flask-migrate для базы данных. Тем не менее. Когда я запускаю команду flask db upgrade, я получаю следующую ошибку: «Модель таблицы гильдий уже существует». Я выполнил эту команду сразу после создания новой миграции с помощью команды 'flask db migrate -m "Guilds Creation Migration"'. Команда обновления фляги обычно делает именно то, что написано. Процитирую человека, написавшего flask-migrate: «Команда flask DB migrate не вносит никаких изменений в базу данных, она просто генерирует сценарий миграции. Чтобы применить изменения к базе данных, необходимо использовать команду обновления базы данных flask». В файле models.py используется следующий код для создания таблицы, на которую он ссылается:

class GuildModel(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    GuildName = db.Column(db.String(300), index=True, unique=True)
    GuildDescription = db.Column(db.String(64))

    def __repr__(self):
        return '<Guild {}>'.format(self.GuildName)

Я понятия не имею, как решить эту проблему или что ее вызывает. Поиски, которые я проделал для решения этой проблемы, на самом деле ничего не дали. Любая помощь будет очень высоко ценится

(Ps: Я использую базу данных SQLite)


person Wavegunner232    schedule 14.07.2018    source источник


Ответы (2)


Я собирался отправить аналогичный запрос сегодня! но какой-то эксперимент дал мне причину. Это потому, что работает либо flask-sqlalchemy, либо flask-migrate. все потому, что как МЫ (да, даже я сделал аналогичную ошибку) определяем имя класса и таблицы.

в качестве решения вы можете использовать __tablename__ = GuildModel (даже если это будет иметь такое же влияние без использования), но даже это создаст проблемы, поскольку по умолчанию sqlalchemy и переносят woks, он преобразует имя таблицы в guild_model

опять же, при новой миграции он не находит GuildModel и создает для него новую миграцию, но при обновлении возникают проблемы, поскольку здесь преобразование классов и вещей по умолчанию сталкивается с его существованием.

РЕШЕНИЕ

__tablename__ = guildmodel or __tablename__ = guild_model

используйте полное имя маленького регистра. Не используйте верхний регистр. Это решило мою проблему, так как я использовал __tablename__, но в строке есть прописные буквы, между которыми возникли проблемы, избавившись от этого, он заработал для меня. Все дело в том, как работает библиотека в ее соглашениях об именах.

person Aniket Parkar    schedule 24.09.2019

Кажется, что эту проблему можно решить несколькими способами. В моем случае я создал только одну единственную миграцию базы данных. Сайт, для которого он предназначен, тоже находился только на стадии тестирования, поэтому сообщения не имели никакого значения. Как и вся база данных. Итак, мое решение было простым: удалите папку миграции и базу данных. Это решило проблему. Я до сих пор не совсем уверен, что вызвало проблему. Тем не менее, это очень решено.

person Wavegunner232    schedule 15.07.2018