Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据库[大规模]上不支持Django“in”语句_Python_Mysql_Sql_Django - Fatal编程技术网

Python 数据库[大规模]上不支持Django“in”语句

Python 数据库[大规模]上不支持Django“in”语句,python,mysql,sql,django,Python,Mysql,Sql,Django,我正在使用Django,并且得到一个错误,说这个版本的MySQL还不支持“LIMIT&IN/ALL/ANY/SOME子查询” 我的数据库结构大致如下: class ImageTag(models.Model): start_image = models.ForeignKey(Image) stop_image = models.ForeignKey(Image) tag = models.TextField(null=True)

我正在使用Django,并且得到一个错误,说这个版本的MySQL还不支持“LIMIT&IN/ALL/ANY/SOME子查询”

我的数据库结构大致如下:

    class ImageTag(models.Model):
        start_image = models.ForeignKey(Image)
        stop_image = models.ForeignKey(Image)
        tag = models.TextField(null=True)

    class Image(models.Model):
        [things we don't really care about right now]
我要做的是获取唯一的图像对象注意:不是值,我需要所有ImageTag对象的start_图像字段中出现的实际对象。我是如何做到这一点的:

    tag_match = [filtering all tags based on a query]
    ids = tag_match.values('start_image').distinct()  #get the distinct image ids
    images = Image.objects.filter(id__in=ids)   #get the actual image objects
这是我所能看到的获取唯一图像对象的最简单和最直接的方法,该对象具有与之关联的ImageTag对象,但我的数据库后端不支持它。关于如何使用原始SQL解决这个问题,我已经看到了一些建议,但如果可能的话,我真的希望避免这种情况,因为我们的开发设置和生产设置之间的差异——为什么这首先是一个问题——让人很难知道什么实际可行,什么不可行


对于这个问题,最好采用Django解决方案

这里是获取清晰图像对象的另一种方法。请尝试并告知这是否有效

class ImageTag(models.Model):
    start_image = models.ForeignKey(Image, related_name="start_image_tags")
    stop_image = models.ForeignKey(Image)
    tag = models.TextField(null=True)

# Fetch only those Image objects which have a related ImageTag
images = Image.objects.exclude(start_image_tags=None).distinct()

# Fetch Image objects for filtered ImageTag query
tag_match = ImageTag.objects.filter(tag="any_filter")
images = Image.objects.filter(start_image_tags__in=tag_match).distinct()

问题来自MySQL本身,而不是Python或Django——在PHP FWIW中也会遇到同样的问题:

Django中的解决方法非常简单:与其使用ValueQuerySet生成SQL子查询,不如传递一个普通列表,即:

tag_match = [filtering all tags based on a query]
ids = list(tag_match.values_list('start_image', flat=True).distinct())  
images = Image.objects.filter(id__in=ids)  

你用的是什么版本?另外,您使用的是什么版本的Python?我们的服务器运行的是MySQL版本5.1.69。我对python版本不太确定,但我相信它至少是2.6.OK。那么您正在使用的Django版本呢?不知道任何其他技术,您可以简单地在mysql中构建一个视图,然后从中进行选择吗?这可以获得所有不同的图像,但是有没有一种方法可以获取与我的搜索匹配的ImageTag对象的筛选标记匹配查询集中的不同图像?添加了另一个带有筛选ImageTag的查询。请现在就尝试回答。不幸的是,列表操作符使其速度太慢,无法为服务器上的5亿个图像进行缩放。那么使用一些真正的SQL数据库怎么样?比如说,PostgreSQL?我是一个在实验室工作的学生,所以我无法控制我们的服务器在使用什么。我知道使用PostgreSQL会简单得多,但这并不是解决我目前问题的可行方法。事实上,我的时间评估是错误的。在这种情况下,list操作符只会根据标签的数量进行时间缩放,标签的数量远远小于图像的数量,这使得这个答案有效。很抱歉我的困惑,谢谢你的回答!