当前位置:  开发笔记 > 编程语言 > 正文

你能在Sqlite3(使用Django)中实现不区分大小写的"唯一"约束吗?

如何解决《你能在Sqlite3(使用Django)中实现不区分大小写的"唯一"约束吗?》经验,为你挑选了1个好方法。

所以,假设我使用Python 2.5的内置默认sqlite3,我有一个Django模型类,代码如下:

class SomeEntity(models.Model):
    some_field = models.CharField(max_length=50, db_index=True, unique=True)

我有管理界面设置,一切似乎工作正常,除了我可以创建两个SomeEntity记录,一个some_field ='some value'和一个some_field ='Some Value'因为some_field上的唯一约束似乎是区分大小写.

在检查唯一性时,是否有某种方法可以强制sqlite 敏感比较中执行一个案例?

我似乎无法在Django的文档中找到一个选项,我想知道是否有一些我可以直接对sqlite做的事情让它按照我想要的方式运行.:-)



1> Noah..:

是的,这可以通过使用以下命令向表中添加唯一索引来轻松完成:

在mytable上创建UNIQUE INDEX uidxName(myfield COLLATE NOCASE)

如果您需要对非ASCII字母不区分大小写,则需要使用与以下内容类似的命令注册您自己的COLLATION:

以下示例显示了对"错误方式"进行排序的自定义排序规则:

import sqlite3

def collate_reverse(string1, string2):
    return -cmp(string1, string2)

con = sqlite3.connect(":memory:")
con.create_collation("reverse", collate_reverse)

cur = con.cursor()
cur.execute("create table test(x)")
cur.executemany("insert into test(x) values (?)", [("a",), ("b",)])
cur.execute("select x from test order by x collate reverse")
for row in cur:
    print row
con.close()

此处显示了sqlite3的其他python文档

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有