所以,假设我使用的是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做,让它按照我想要的方式运行。 : - )
答案 0 :(得分:9)
是的,可以通过使用以下命令向表中添加唯一索引来轻松完成:
在mytable上创建独特的索引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文档显示为here
答案 1 :(得分:3)
也许您可以创建和使用自定义模型字段;它将是CharField的子类,但提供返回“text collate nocase”的db_type方法