【发布时间】:2014-02-11 17:55:33
【问题描述】:
我正在使用 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_image 字段中出现的唯一 Image 对象(注意:不是值,我需要实际对象)。我是怎么做的:
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 对象的唯一 Image 对象,但我的数据库后端不支持它。我已经看到了一些关于如何使用原始 SQL 解决此问题的建议,但如果可能的话,我真的很想避免这种情况,因为我们的开发设置和生产设置之间存在差异(为什么这首先是一个问题) 让我们很难知道什么实际可行,什么不可行。
对于这个问题的某种 Django 解决方法将不胜感激。
【问题讨论】:
-
你用的是什么版本?另外,您使用的是什么版本的 Python?
-
我们的服务器运行 MySQL 5.1.69 版本。我对 python 版本不太确定,但我相信它至少是 2.6。
-
好的。你正在使用的 Django 的 version 怎么样?
-
对其他任何技术一无所知,你能简单地在mysql中构建一个VIEW,然后从中选择吗?