Как написать нижеприведенный sql-запрос, используя Django queryset?
Я перепробовал много решений, но не нашел ни одного, а также является ли django queryset быстрее, чем необработанные sql join запросы?
Models -
class S2BotCategoriesMappings(models.Model):
id = models.IntegerField(primary_key=True)
id_s2_bot = models.ForeignKey(S2Bot, models.DO_NOTHING, db_column='id_s2_bot', blank=True, null=True)
id_s2_bot_categories = models.ForeignKey(S2BotCategories, models.DO_NOTHING, db_column='id_s2_bot_categories', blank=True, null=True)
class Meta:
managed = False
db_table = 's2_bot_categories_mappings'
class S2UserSubscription(models.Model):
id = models.IntegerField(primary_key=True)
id_s2_users = models.ForeignKey('S2Users', models.DO_NOTHING, db_column='id_s2_users', blank=True, null=True)
id_s2_bot = models.ForeignKey(S2Bot, models.DO_NOTHING, db_column='id_s2_bot', blank=True, null=True)
class Meta:
managed = False
db_table = 's2_user_subscription'
query = """
SELECT
s2_user_subscription.id_s2_users,
s2_user_subscription.id_s2_bot,
s2_bot_categories_mappings.id_s2_bot_categories
FROM s2_user_subscription
LEFT JOIN s2_bot_categories_mappings
ON s2_user_subscription.id_s2_bot = s2_bot_categories_mappings.id_s2_bot;
"""
По этой ссылке есть ответ на первый вопрос, который вы задали Соображения по производительности Django QuerySet vs. raw SQL
Я нашел это в документации. Там должен быть ответ, который вы ищете. https://docs.djangoproject.com/en/4.1/topics/db/sql/ Более конкретно по ссылке ниже есть ответ, как сопоставить поля запроса с полями модели в Django, потому что, как я понял, это то, что вы пытаетесь сделать. https://docs.djangoproject.com/en/4.1/topics/db/sql/#mapping-query-fields-to-model-fields. Надеюсь, это поможет.