Как написать нижеприведенный 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. Надеюсь, это поможет.

Вернуться на верх