Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2017 21:34:55

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

ivn
Нет. Вы невнимательно посмотрели мой пример и не смотрели презентацию…

Офлайн

#2 Март 15, 2017 19:18:08

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

4kpt_V
ivnНет. Вы невнимательно посмотрели мой пример и не смотрели презентацию…
я вот смотрю на Ваш код и вижу, что там parent.id, но в самом классе Parent нет поля id, так же смотрю на "main и не вижу закрывающейся кавычки и судя по всему не хватает запятой.
Вот и возникает вопрос верности кода? еще эти скобки не очень комфортно смотреть на них и Вы пишите MTO self, но меня скорее всего интересует One To Many, посмотрите на схему.
в документации sqlalchemy есть действительно как One To Many и Many To One, зачем это сделано мне пока не ясно.

Офлайн

#3 Март 15, 2017 19:31:50

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

Я понял. Вы мой доклад вообще не удосужились посмотреть. Там схема совпадает с Вашей. Только названия полей другие. Код поправил. Почему-то сожрало при переносе в LibreOffice Impress.

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

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

Офлайн

#4 Март 15, 2017 20:25:32

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

4kpt_V
почему они различаются?
да

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

Офлайн

#5 Март 15, 2017 20:41:23

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

ivn
да

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

Схему прикладываю. Совпадает с Вашей.

Прикреплённый файлы:
attachment 09.png (316,9 KБ)

Офлайн

#6 Март 15, 2017 20:45:51

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

спасибо, я посмотрю еще раз, буду изучать
думаю сделать вот так:

 menu_horizontal = db.relationship('MenuHorizontal', remote_side=[id], backref='menu_horizontal_this')

Отредактировано ivn (Март 16, 2017 19:44:34)

Офлайн

#7 Март 16, 2017 19:26:23

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

4kpt_V
У Вас есть еще доклады? -) или мб какие то ресурсы?

Офлайн

#8 Март 16, 2017 20:17:18

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

ivn
У меня есть доклады, но не по алхимии.

P.S. Вот теперь правильно сделали

Офлайн

#9 Март 16, 2017 20:50:58

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

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

Отредактировано ivn (Март 16, 2017 21:13:09)

Офлайн

#10 Март 16, 2017 21:35:36

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

Так. Смотрю Вы не до конца понимаете что происходит

 #
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)

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version