объясните пожалуйста, такой вопрос.
Сделал две таблицы допустим parents и childs, сделал связь один ко многим, как я понял - это когда одна запись в parent имеет кучу записей в child. Когда я создаю новую запись в parents, то сразу могу создать для этой записи всех child. А вот как добавить новые строки в childs и указать им привязку к уже существующим parents.
Посмотри backref. Если не ошибаюсь, оно
backref это вроде как псевдоним для атрибута и все
Делал по примеру две таблицы User и Address. Также ещё были примеры с родителями и детьми. Но это не суть. class User(Base): tablename = 'user' id = Column(Integer, primary_key=True) name = Column(String) fullname = Column(String) def repr(self): return "<User(%r, %r)>" % ( self.name, self.fullname ) class Address(Base): tablename = 'address' id = Column(Integer, primary_key=True) email_address = Column(String, nullable=False) user_id = Column(Integer, ForeignKey('user.id')) user = relationship("User", backref="addresses") Затем я допустим добавляю в список юзера jack = User(name='jack', fullname='Jack Bean') И могу указать этому юзеру список адресов. jack.addresses = [Address(email_address='jack@gmail.com'), Address(email_address='j25@yahoo.com')] а вот как быть если мне нужно просто добавить новые адреса с привязкой к пользователю? Я могу напрямую указать user_id в столбце с внешним ключом?
User.addresses.append(Address())
Да, так и делается.И извлекается так же, джойнами или подзапросами.Внешние ключи больше,наверно, нужны для каскадных операций. Пы.сы.Поправьте, если я не прав, не до конца книжку ещё прочитал
Ну тут ещё и идея производительности. Например, некоторые движки настаивают на принудительной индексации внешнего ключа. Некоторые, нет. Если ключ не индексирован, то при удалении ты впираешься в фулл скан по таблице. Как это хендлить — решать автору.
Собсна это же и про джойны, но это уже нужно смотреть эксплэйны.
Обсуждают сегодня