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

2024-01-08

假设我正在使用 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 执行一个案例in检查唯一性时进行敏感比较?

我似乎无法在 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 http://docs.python.org/library/sqlite3.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你能在Sqlite3(使用Django)中实现不区分大小写的“唯一”约束吗? 的相关文章

随机推荐