Выполнение 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, если вы еще этого не сделали. Он содержит много действительно хорошей информации.