【发布时间】:2016-03-07 00:06:07
【问题描述】:
我的数据库中有一个具有此值的用户:
booking_id -> 25DgW
此字段在我的模型中标记为unique
booking_id = models.CharField(null=False, unique=True, max_length=5, default=set_booking_id)
但是现在当我这样查询用户时:
>>> User.objects.get(booking_id='25dgw') # I think this should throw a DoesNotExist exacption
<User: John Doe>
即使我这样做:
>>> Partner.objects.get(booking_id__exact='25dgw')
<User: John Doe>
我需要一个查询,仅当代码的编写方式与保存在数据库中的方式完全相同时才返回用户:25DgW 而不是25dgw。
我应该如何查询?
【问题讨论】:
-
万一你不确定,这是mysql的问题。使用 ORM 实现这一点并不容易。原始 sql 可能会这样做:stackoverflow.com/questions/7857669/mysql-case-sensitive-query
-
@ShangWang 那么
__exact是干什么用的?有什么方法(困难且不容易)做到这一点? -
将您的 mysql 排序规则更改为区分大小写的排序规则。
__exact表示 Django 应该告诉数据库您想要完全匹配。数据库排序规则设置数据库是否应考虑 'bob' 和 'Bob' 完全匹配。 stackoverflow.com/questions/5629111/… 展示了一些方法来做到这一点,但这是一个很大的话题。 -
@PeterDeGlopper 我一直在查看我的架构,发现它使用
latin1排序规则,但latin1_general_cs可用,是否可以更改? -
检查如果您手动运行选择会发生什么 - 根据您所做的更改,它可能没有达到预期的效果。例如,我相信更改数据库排序规则会更改新表的默认排序规则,但不会影响现有表。
标签: mysql django django-orm