Найти - Пользователи
Полная версия: Flask. SQLAlchemy.Ошибка sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)
Начало » Python для новичков » Flask. SQLAlchemy.Ошибка sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)
1
slava_kv_32
Доброго времени суток. В приложении есть 4 модели. При выполнении команды flask db upgrade, на чистой базе данных получаю следущую ошибку:

sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, “Table ‘short_urls.settings’ doesn't exist”)
[SQL: SELECT settings.id AS settings_id, settings.origin_url_min_len AS settings_origin_url_min_len, settings.origin_url_max_len AS settings_origin_url_max_len, settings.short_url_min_len AS settings_short_url_min_len, settings.short_url_max_len AS settings_short_url_max_len, settings.short_url_generate_url AS settings_short_url_generate_url, settings.first_name_min_len AS settings_first_name_min_len, settings.first_name_max_len AS settings_first_name_max_len, settings.last_name_min_len AS settings_last_name_min_len, settings.last_name_max_len AS settings_last_name_max_len, settings.nick_name_min_len AS settings_nick_name_min_len, settings.nick_name_max_len AS settings_nick_name_max_len, settings.password_min_len AS settings_password_min_len
FROM settings
LIMIT %(param_1)s]

(Background on this error at: https://sqlalche.me/e/20/f405)

Вот файл миграции модели settings:

“”"Create settings

Revision ID: bdbc71c02d5b
Revises: 5609b3afde7b
Create Date: 2023-12-14 20:34:34.779207

 """
from alembic import op
import sqlalchemy as sa
revision = 'bdbc71c02d5b'
down_revision = '5609b3afde7b'
branch_labels = None
depends_on = None
def upgrade():
    op.create_table('settings',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('origin_url_min_len', sa.Integer, nullable=False),
    sa.Column('origin_url_max_len', sa.Integer, nullable=False),
    sa.Column('short_url_min_len', sa.Integer, nullable=False),
    sa.Column('short_url_max_len', sa.Integer, nullable=False),
    sa.Column('short_url_generate_url', sa.Integer, nullable=False),
    sa.Column('first_name_min_len', sa.Integer, nullable=False),
    sa.Column('first_name_max_len', sa.Integer, nullable=False),
    sa.Column('last_name_min_len', sa.Integer, nullable=False),
    sa.Column('last_name_max_len', sa.Integer, nullable=False),
    sa.Column('nick_name_min_len', sa.Integer, nullable=False),
    sa.Column('nick_name_max_len', sa.Integer, nullable=False),
    sa.Column('password_min_len', sa.Integer(), nullable=False),
    sa.PrimaryKeyConstraint('id')
    )
    op.execute("""
        INSERT INTO settings 
        (origin_url_min_len, origin_url_max_len, short_url_min_len, short_url_max_len,
         short_url_generate_url, first_name_min_len, first_name_max_len, last_name_min_len,
         last_name_max_len, nick_name_min_len, nick_name_max_len, password_min_len)
        VALUES 
        (10, 512, 2, 15, 7, 2, 50, 2, 50, 2, 20, 8)
    """)
def downgrade():
    op.drop_table('settings')


Буду благодарен если кто нибудь сможет помочь.
ZerG
Так неплохо бы и модель показать
slava_kv_32
ZerG
Так неплохо бы и модель показать

 class Settings(db.Model):
    _instance = None
    __tablename__ = "settings"
    id = db.Column(db.Integer, primary_key=True)
    origin_url_min_len = db.Column(db.Integer, nullable=False, default=10)
    origin_url_max_len = db.Column(db.Integer, nullable=False, default=512)
    short_url_min_len = db.Column(db.Integer, nullable=False, default=2)
    short_url_max_len = db.Column(db.Integer, nullable=False, default=15)
    short_url_generate_url = db.Column(db.Integer, nullable=False, default=7)
    first_name_min_len = db.Column(db.Integer, nullable=False, default=2)
    first_name_max_len = db.Column(db.Integer, nullable=False, default=50)
    last_name_min_len = db.Column(db.Integer, nullable=False, default=2)
    last_name_max_len = db.Column(db.Integer, nullable=False, default=50)
    nick_name_min_len = db.Column(db.Integer, nullable=False, default=2)
    nick_name_max_len = db.Column(db.Integer, nullable=False, default=20)
    password_min_len = db.Column(db.Integer, nullable=False, default=8)
    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super(Settings, cls).__new__(cls, *args, **kwargs)
        return cls._instance
settings_params = Settings()
ZerG
Очень похоже что вы пропускаете какойто пункт из доки
https://github.com/miguelgrinberg/Flask-Migrate

 flask db init
flask db migrate
flask db upgrade

Я бы попробовал пример с гита а потом на вашем проекте и сравнить результаты
а то очено похоже то вы делаете по одной дкбильной статье с хабра где афтор дебил
slava_kv_32
ZerG
Очень похоже что вы пропускаете какойто пункт из докиhttps://github.com/miguelgrinberg/Flask-Migrate
Спасибо за помощь. Попробую.
Rodegast
 def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super(Settings, cls).__new__(cls, *args, **kwargs)
        return cls._instance

Кокой смысл из модели сиглтон делать?
PS Я ORM-ами не пользуюсь мне просто интересно.
slava_kv_32
Rodegast
Таблица с настройками.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB