колба sqlalchemy и обновление каскада - PullRequest
0 голосов
/ 14 октября 2019

Я пишу инвентаризационное приложение с флягой + sqlalchemy, короткая история у меня короткая, у меня есть таблица с именем Билл с id, bill_id и bill_date, и таблица инвентаря с id, bill_number, loctation. Затем, используя поле выбора запроса, пользователь выбирает bill_number, заполняет остальные поля и сохраняет информацию в БД.

, но если я обновляю bill_number в таблице счетов, необходимо, чтобы также bill_number в таблице инвентаризации обновил все этизаписи.

Я попытался с Foreignkey, создание оператора for для обновления всех записей, и ничего не работает. Кроме того, метод обновления, но работает только с static_values, но с переменными вызвал буквальную ошибку.

class Bill(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    bill_number = db.Column(db.String(64), index=True, unique=True)
    bill_date = db.Column(db.Date, index=False, unique=False)

class Location(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    location_name = db.Column(db.String(64), index=True, unique=True)

class Inventory(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    serial_number = db.Column(db.String(64), index=True, unique=True)
    bill_number = db.Column(db.String(64), db.ForeignKey('bill.bill_number'))
    location = db.Column(db.String(64), db.ForeignKey('location.location_name'))

update = Inventory.query.filter(Inventory.bill_number==old_bill).update({ Inventory.bill_number : new_bill})

, где old_bill и new_bill взяты из формы, если попытка с:

Inventory.query.filter(Inventory.bill_number=='666').update({ Inventory.bill_number : '999'})

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

Даже пробовал с:

old = form.old.data
new = form.new.data
all = Inventory.query.filter_by(bill_number=old).all()
for i in all:
    i.bill_numer = new
db.session.commit() 

но нет, не могу обновить всю таблицу инвентаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...