所以,假设我使用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做的事情让它按照我想要的方式运行.:-)
是的,这可以通过使用以下命令向表中添加唯一索引来轻松完成:
在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文档