Найти - Пользователи
Полная версия: Flask-SQLAlchemy связь один ко многим в пределах одной таблице
Начало » Базы данных » Flask-SQLAlchemy связь один ко многим в пределах одной таблице
1 2 3
4kpt_V
ivn
Нет. Вы невнимательно посмотрели мой пример и не смотрели презентацию…
ivn
4kpt_V
ivnНет. Вы невнимательно посмотрели мой пример и не смотрели презентацию…
я вот смотрю на Ваш код и вижу, что там parent.id, но в самом классе Parent нет поля id, так же смотрю на "main и не вижу закрывающейся кавычки и судя по всему не хватает запятой.
Вот и возникает вопрос верности кода? еще эти скобки не очень комфортно смотреть на них и Вы пишите MTO self, но меня скорее всего интересует One To Many, посмотрите на схему.
в документации sqlalchemy есть действительно как One To Many и Many To One, зачем это сделано мне пока не ясно.
4kpt_V
Я понял. Вы мой доклад вообще не удосужились посмотреть. Там схема совпадает с Вашей. Только названия полей другие. Код поправил. Почему-то сожрало при переносе в LibreOffice Impress.

ivn
в документации sqlalchemy есть действительно как One To Many и Many To One, зачем это сделано мне пока не ясно.

В смысле? Зачем нужны связи MTO и OTM и почему они различаются?
ivn
4kpt_V
почему они различаются?
да

доклад смотрел, там вначале плохо видна схема
4kpt_V
ivn
да

В докладе об этом есть. И есть даже секрет как по моделям определять

Схему прикладываю. Совпадает с Вашей.
ivn
спасибо, я посмотрю еще раз, буду изучать
думаю сделать вот так:

 menu_horizontal = db.relationship('MenuHorizontal', remote_side=[id], backref='menu_horizontal_this')
ivn
4kpt_V
У Вас есть еще доклады? -) или мб какие то ресурсы?
4kpt_V
ivn
У меня есть доклады, но не по алхимии.

P.S. Вот теперь правильно сделали
ivn
4kpt_V
ivnУ меня есть доклады, но не по алхимии.P.S. Вот теперь правильно сделали
было бы интересно посмотреть.

если по теме:

 class MenuHorizontal(db.Model):
    __tablename__ = 'menu_horizontal'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(45), nullable=False)
    id_contents = db.Column(db.Integer, db.ForeignKey('contents.id'), nullable=False)
    id_parent = db.Column(db.Integer, db.ForeignKey('menu_horizontal.id'), nullable=False)
    menu_horizontal = db.relationship('MenuHorizontal', remote_side=[id], backref='menu_horizontal_this')

делаю:
 q = models.MenuHorizontal(name='menu', id_contents=1, id_parent=1)
db.session.add(q)
db.session.commit()
q = models.MenuHorizontal(name='menu1', id_contents=1, id_parent=3)
db.session.add(q)
db.session.commit()

sqlalchemy и sqlite пропускает такую запись, но ведь нет id=3

sqlite:
 Table [menu_horizontal]
    Fields: 4
        [id]: INTEGER NOT NULL
        [name]: VARCHAR(45) NOT NULL
        [id_contents]: INTEGER NOT NULL
        [id_parent]: INTEGER NOT NULL
    Foreign Keys: 2
        [] ([id_contents]) REFERENCES [contents]([id])
        [] ([id_parent]) REFERENCES [menu_horizontal]([id])
    Indexes: 1
        [] PRIMARY
            [id] 
    Triggers: 0
    Unique constraints: 0
    Check constraints: 0
4kpt_V
Так. Смотрю Вы не до конца понимаете что происходит

 #
q_f = models.MenuHorizontal(name='menu_parent')
db.session.add(q_f)
q_2 = models.MenuHorizontal(name='menu_slave_1')
q_3 = models.MenuHorizontal(name='menu_slave_2')
q_f.menu_horizontal = q_2
q_f.menu_horizontal = q_3
db.session.commit()
#
parent = db.session.query(models.MenuHorizontal).filter(models.MenuHorizontal.name == 'menu_parent').one()
for menu_slave in parent.menu_horizontal_this:
    print(slave.name)

Как-то так. У меня к презентации есть кстати куча кода. Я все проверял. Там и создания по таблицам и вызовы. Только все это не причесано, но, в принципе, юзабельно. Могу дать с одним условием. Если причешите…
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