Как обновить значение внешнего ключа в Flask Sqlalchemy?

#flask #flask-sqlalchemy #flask-restful

#flask #flask-sqlalchemy #flask-restful

Вопрос:

 class VehicleModel(db.Model):
__tablenam__ = 'vehicle'
id = db.Column(db.Integer,primary_key=True)


class DriverModel(db.Model):
__tablename__ = 'driver'
id = db.Column(db.Integer,primary_key=True)
v_id = db.Column(db.Integer,db.ForeignKey('vehicle.id'))
v_rel = db.relationship('VehicleModel',backref=db.backref('vehicle',uselist=False))


def update(self,id,v_id):
    self.id = id
    self.v_id = v_id
    db.session.commit()
  

В приведенном выше коде я не могу обновить значение v_id. Sqlalchemy также не выдает никаких ошибок sql. Я не знаю, метод обновления работает нормально, но не может обновить значение v_id. Значение v_id остается таким же, как оно было установлено при первом добавлении столбца.

Комментарии:

1. Я не совсем понимаю, какова ваша цель здесь. Кроме того, почему вы меняете идентификатор? Я не могу придумать ни одной причины для изменения id — это внутренняя вещь db, и ее изменение может что-то испортить.

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

3. Попробуйте опустить self.id = id . Нет причин для изменения id . Тогда, пожалуйста, отчитайтесь 🙂

Ответ №1:

Это связано с тем, что Alembic не может выполнять особенно подробные проверки ваших dB.Model файлов, вам нужно изменить сценарий миграции самостоятельно. Если вы используете Flask-migrate, он будет находиться в папке migrations / versions. Измените это, используя синтаксис alembic, найденный в другом месте файла, чтобы изменить внешний ключ.

Комментарии:

1. я не хочу ничего переносить, все, что я хочу, это просто обновить значение внешнего ключа!

2. Что вы используете для внесения изменений в схему базы данных?

Ответ №2:

Ну, это сработало автоматически после внесения определенных изменений в отношение, так что неважно! И спасибо всем за ваши ответы!

Комментарии:

1. Привет, Рам, у меня такая же проблема, не могли бы вы сообщить мне, какие изменения вы внесли, чтобы заставить его работать?