Выполнение SQL-запроса в Django

У нас есть четыре таблицы, включая Category, Seller, Product, Product_Seller. Каждый продукт имеет одну категорию. каждый продавец может продавать продукт. Предположим, что вы не продаете один и тот же продукт несколько раз, и каждый продавец продает каждый продукт не более одного раза. Мы хотим найти продукты, которые имеют более 5 продавцов. и мы хотим найти вторую категорию, которая имеет наибольшее количество продуктов. Я хочу запустить SQL код в Django. Но он содержит множество ошибок. Пожалуйста, дайте мне знать, как я могу это исправить. Спасибо за ваше время и внимание.

from django.db import models
from django.db import connection
class Category(models.Model):
    title = models.CharField(max_length=128)
class Seller(models.Model):
    name = models.CharField(max_length=128)
class Product(models.Model):
    category_id = models.ForeignKey(category),
    rate = models.IntegerField(blank=True, null=True)
class Product_Seller(models.Model):
    
    product_id = models.ForeignKey(product),
    seller_id = models.ForeignKey(seller),
    price = models.IntegerField(blank=True, null=True) 
cursor = connection.cursor()

cursor.execute(
SELECT product_id 
FROM Product_Seller
groupby product_id 
having Count(product_id) >5;)

cursor.execute(
SELECT category_id
FROM Product
groupby category_id 
having max(Count(category_id))
and NOT IN(SELECT category_id FROM Product
groupby category_id 
having max(Count(category_id)));)

ошибки следующие:

Попробуйте это:

from django.db import models
from django.db import connection


class Category(models.Model):
    title = models.CharField(max_length=128)


class Seller(models.Model):
    name = models.CharField(max_length=128)


class Product(models.Model):
    category_id = models.ForeignKey(category),
    rate = models.IntegerField(blank=True, null=True)


class Product_Seller(models.Model):    
    product_id = models.ForeignKey(product),
    seller_id = models.ForeignKey(seller),
    price = models.IntegerField(blank=True, null=True) 

Вот пример запроса - но почему бы не использовать ORM? Это убийственная функция Django! Скорее всего, вам придется изменить имя таблицы ниже на appname_product_seller, и оно должно быть ProductSeller, а не Product_Seller. В Python принято использовать CamelCase для классов и snake_case для функций, атрибутов и переменных

cursor = connection.cursor()

cursor.execute("""
    SELECT product_id 
    FROM Product_Seller
    GROUP BY product_id 
    HAVING COUNT(product_id) > 5
""")

Я бы рекомендовал пройтись по учебнику Django, если вы еще этого не сделали. Он содержит много действительно хорошей информации.

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