Django queryset在where…in查询中未转义文本
我试图构造一个相当简单的queryset,它根据相关表中的一组条件返回一个值列表。根据URL参数中的值,将值数组传递给queryset上过滤器中的Django queryset在where…in查询中未转义文本,django,postgresql,django-queryset,postgresql-9.1,Django,Postgresql,Django Queryset,Postgresql 9.1,我试图构造一个相当简单的queryset,它根据相关表中的一组条件返回一个值列表。根据URL参数中的值,将值数组传递给queryset上过滤器中的 问题是Django将这些值作为文本传递到SQL查询中,而不使用引号,因此查询失败 焦点表格包含有关公司(“实体”)的信息以及有关这些公司的办事处(“办事处”)的表格信息 这是传递给queryset的值数组: locations = [u'San Francisco', u'New York'] 问题是: companies = Entity.obj
问题是Django将这些值作为文本传递到SQL查询中,而不使用引号,因此查询失败
焦点表格包含有关公司(“实体”)的信息以及有关这些公司的办事处(“办事处”)的表格信息
这是传递给queryset的值数组:
locations = [u'San Francisco', u'New York']
问题是:
companies = Entity.objects.values("name","summary").filter(office__city__in=locations)
以下是实际命中SQL的查询:
SELECT "entities_entity"."name", "entities_entity"."summary" FROM "entities_entity" INNER JOIN "entities_office" ON ("entities_entity"."id" = "entities_office"."entity_id") WHERE "entities_office"."city" IN (San Francisco, New York)
如果我手动运行SQL查询,但用单引号(而不是双引号)将in
子句中的每个语句括起来,则效果很好
关于为什么会发生这种情况,以及我如何解决它,有什么想法吗
值得一提的是,以下是模型的相关部分
class Entity(models.Model):
name = models.CharField(max_length=450)
summary = models.TextField(blank=True,null=True)
class Office(models.Model):
entity = models.ForeignKey(Entity)
city = models.CharField(max_length=250,blank=True,null=True)
当Django替换内容以应用查询过滤器时,这似乎是一种奇怪的行为
也许值得一试:
地点=[u'\'旧金山''',u'\'纽约']
你犯了什么错误?您如何检查SQL?django.db.connection.querys不包含转义参数,只是为了调试。啊,我在PGAdmin中根据公司对查询进行了双重检查。查询
--可能我的数据中有错误。。。