[英]Django db raw MySQL execute
我有一個模特和定制經理
模型
class VideoDescription(models.Model):
title_eng = models.CharField(max_length=120, unique=True)
title_ru = models.CharField(max_length=120, unique=True)
slug = models.SlugField(max_length=200, unique=True, blank=True)
rating = models.IntegerField(default=0)
pub_date_start = models.DateField()
poster = models.ImageField(upload_to=get_poster_path)
genre = models.CharField(validators=[validate_comma_separated_integer_list], max_length=10, default=0)
description = models.TextField(blank=True)
objects = VideoDescriptionManager()
class VideoDescriptionManager(models.Manager):
def get_video_by_genre(self, genre):
from django.db import connection
with connection.cursor() as cursor:
cursor.execute('''select m.id, m.title_eng, m.title_ru, m.slug, m.rating, m.pub_date_start,
m.poster, m.genre, m.description, COUNT(*) from main_app_videodescription m
where genre like "%%%s%%";''', [genre])
result_list = []
for row in cursor.fetchall():
p = self.model(id=row[0], title_eng=row[1], title_ru=row[2], slug=row[3], rating=row[4],
pub_date_start=row[5], poster=row[6], genre=row[7], description=row[8])
p.num_responses = row[9]
result_list.append(p)
return result_list
而且我有一個錯誤:
django.db.utils.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.
Google在說我,在原始sql查詢中將[類型]更改為(類型),但無濟於事。 我該如何解決?
sqlite不使用%s
作為參數,它使用?
。
但是,無論使用sqlite還是另一個db,都不能使用參數替換在字符串中間插入參數。 您需要分別構建字符串,然后使用參數將其插入。 所以:
param = "%{}%".format(genre)
cursor.execute('''select m.id, m.title_eng, m.title_ru, m.slug, m.rating, m.pub_date_start,
m.poster, m.genre, m.description, COUNT(*) from main_app_videodescription m
where genre like ?;''', [param])
請注意,使用.format
無需再對百分比進行轉義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.