因此,假设我使用的是 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 上创建唯一索引 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
关于python - 你能在 Sqlite3(使用 Django)中实现不区分大小写的 'unique' 约束吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/276656/