Варианты создания отношений между моделями базы данных (sqlite). колба - PullRequest
1 голос
/ 02 июля 2019

Создаю связь между двумя моделями БД (sqlite) Operation и Contragent:

class Operation(db.Model):
    __tablename__ = "operation"
    id = db.Column(db.Integer, primary_key=True)    
    date_operation = db.Column(db.DateTime, index=True, nullable=True)    
    contragent_id = db.Column(db.Integer, db.ForeignKey('contragent.id'))# add db.ForeignKey('contragent.id')

    def __repr__(self):
        return '<Operation {}>'.format(self.code)


class Contragent(db.Model):
    __tablename__ = "contragent"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(360))    
    operations = db.relationship('Operation', backref='operation', lazy='dynamic')# add this line

    def __repr__(self):
        return '<Contragent {}>'.format(self.name)

После внесения изменений в модели я создаю новую миграцию базы данных и Я применяю изменения в базе данных, получая ошибку:

(venv) C:\Users\User\testapp>flask db upgrade
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade d0ac0532c134 -> 285707aa6265,
Operation table
ERROR [root] Error: No support for ALTER of constraints in SQLite dialect

В методе run_migrations_online () файла env.py я добавил render_as_batch = True, но ошибка все еще остается:

with connectable.connect() as connection:
        context.configure(
            connection=connection,
            target_metadata=target_metadata,
            process_revision_directives=process_revision_directives,
            render_as_batch=True, # add this line
            **current_app.extensions['migrate'].configure_args
        )

После этого я попытался установить значение переменной render_as_batch:

config.get_main_option('sqlalchemy.url').startswith('sqlite:///')
...
with connectable.connect() as connection:
        context.configure(
            connection=connection,
            target_metadata=target_metadata,
            process_revision_directives=process_revision_directives,
            render_as_batch=config.get_main_option('sqlalchemy.url').startswith('sqlite:///'), # add this line
            **current_app.extensions['migrate'].configure_args
        )
....

Ошибка все еще происходит! Почему ошибка возникает даже после установки переменной render_as_batch с рекомендованными значениями и какие есть варианты для изменения модели базы данных?

...