繁体   English   中英

Django db Raw MySQL执行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM