Size: a a a

2020 March 30

MB

Max Block in Python Flask
Alex
эм...

1) вначале генерим новую миграцию, на основе autogenerate
2) идем читаем код.
3) правим.
4) пишем тесты
5) коммитим.
Ну мне сильно проще прочитать именно SQL код, и уже если там что-то не так, только тогда уже вникать как вручную на alembic делать миграции.
источник

NL

Nikita L in Python Flask
Привет. Помогите в пониманием алхимии плз.
Есть 2 модельки связанные через relationship.
class Parent(Base):
   id = Column(Integer, primary_key=True)
   child = relationship("Child", uselist=False, back_populates="parent")

class Child(Base):
   id = Column(Integer, primary_key=True)
   parent_id = Column(Integer, ForeignKey('parent.id'))
   parent = relationship("Parent", back_populates="child")

Когда я вызываю запрос
Parent.query.all()

на выходе получаю список объектов Parent.

Правильно понимаю, что при последующей итерации по этому листу, и запросом связанного объекта parent.child в БД отправляются дополнительные запросы?

Т.е. чтобы понять child каждого parent нужно сделать n-нное количество запросов к базе?

Если таких объектов, скажем, десятки тысяч и количество «вложенных» объектов не 1, а 3, как правильнее составить запрос, чтобы с меньшей нагрузкой на бд вытащить все эти данные?
источник

АП

Агент Печенька in Python Flask
Nikita L
Привет. Помогите в пониманием алхимии плз.
Есть 2 модельки связанные через relationship.
class Parent(Base):
   id = Column(Integer, primary_key=True)
   child = relationship("Child", uselist=False, back_populates="parent")

class Child(Base):
   id = Column(Integer, primary_key=True)
   parent_id = Column(Integer, ForeignKey('parent.id'))
   parent = relationship("Parent", back_populates="child")

Когда я вызываю запрос
Parent.query.all()

на выходе получаю список объектов Parent.

Правильно понимаю, что при последующей итерации по этому листу, и запросом связанного объекта parent.child в БД отправляются дополнительные запросы?

Т.е. чтобы понять child каждого parent нужно сделать n-нное количество запросов к базе?

Если таких объектов, скажем, десятки тысяч и количество «вложенных» объектов не 1, а 3, как правильнее составить запрос, чтобы с меньшей нагрузкой на бд вытащить все эти данные?
Да, называется это проблема 1+N запросов. Решается это установкой политики загрузки данных в релейшне.
источник

NL

Nikita L in Python Flask
Агент Печенька
Да, называется это проблема 1+N запросов. Решается это установкой политики загрузки данных в релейшне.
А существует какой-нибудь метод или способ, который мне выдаст сразу все вложенные объекты?
В сыром sql, например, несколькими джойнами это решается
источник

T

Tishka17 in Python Flask
при чем эту политику можно в момент запроса поментья
источник

АП

Агент Печенька in Python Flask
Nikita L
А существует какой-нибудь метод или способ, который мне выдаст сразу все вложенные объекты?
В сыром sql, например, несколькими джойнами это решается
Да, я тебе этот способ сказал.
источник

T

Tishka17 in Python Flask
Nikita L
А существует какой-нибудь метод или способ, который мне выдаст сразу все вложенные объекты?
В сыром sql, например, несколькими джойнами это решается
ну прочитай про lazy параметр
источник

NL

Nikita L in Python Flask
Понял, спасибо!
источник

NL

Nikita L in Python Flask
иду изучать
источник

MB

Max Block in Python Flask
Nikita L
А существует какой-нибудь метод или способ, который мне выдаст сразу все вложенные объекты?
В сыром sql, например, несколькими джойнами это решается
db_session.query(Parent).options(joinedload(Parent.child)).all()
источник

АП

Агент Печенька in Python Flask
+
Там много политик, выбирай какая нужна именно тебе.
источник

AM

Artur Mustafin in Python Flask
Nikita L
А существует какой-нибудь метод или способ, который мне выдаст сразу все вложенные объекты?
В сыром sql, например, несколькими джойнами это решается
Почти никогда сразу все данные не нужны, если только ui дизайнер не полный отморозок и ему надо на один экран вывести вот все сразу, или бек, которые выдает все сразу, это пздетс тормоза по сравнению с GraphQL, тем более что это никому не надо, в Facebook давно это поняли
источник

T

Tishka17 in Python Flask
чо
источник

T

Tishka17 in Python Flask
Artur Mustafin
Почти никогда сразу все данные не нужны, если только ui дизайнер не полный отморозок и ему надо на один экран вывести вот все сразу, или бек, которые выдает все сразу, это пздетс тормоза по сравнению с GraphQL, тем более что это никому не надо, в Facebook давно это поняли
ты пробовал GraphQL реализовывать на сервере?
источник

AM

Artur Mustafin in Python Flask
Tishka17
ты пробовал GraphQL реализовывать на сервере?
На каком языке программирования ?
источник

T

Tishka17 in Python Flask
на питоне
источник

AM

Artur Mustafin in Python Flask
Tishka17
на питоне
На питоне не пробовал, а что
источник

T

Tishka17 in Python Flask
а на чем пробовал?
источник

T

Tishka17 in Python Flask
и как решал проблему N+1 в graphql?
источник

MB

Max Block in Python Flask
Nikita L
А существует какой-нибудь метод или способ, который мне выдаст сразу все вложенные объекты?
В сыром sql, например, несколькими джойнами это решается
Я тоже сейчас sqlalchemy осваиваю, и пользуюсь таким подходом. У меня есть отдельный мини проектик, где я тестирую разные штуки. И важно понимать, какой именно SQL создает алхимия. И это удобно делать так:  в create_engine вызове добавялешь параметр echo=True. И тогда ты в консоли видишь все SQL запросы.
источник