python - 你能在 Sqlite3(使用 Django)中实现不区分大小写的 'unique' 约束吗?

标签 python django sqlite django-models

假设我正在使用 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 (myfield COLLATE NOCASE) 上创建唯一索引 uidxName

如果您需要对非 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/

相关文章:

java - 使用 CURRENT_TIMESTAMP 作为 ORMLite 和 SQLite 字段的默认值

python - 如何使用 Discord py 检查 Minecraft 服务器是否在线并获取统计信息(如在线玩家数量)

python - 如何修改 pandas DataFrame 中的单元格?

python - Matplotlib 条形图定制

python - 将 Matplotlib 饼图百分比标签覆盖为总和不等于 100% 的特定值

python - 同时更新模型及其相关父模型的时间戳

Django - 如何在ajax函数下显示消息

Django REST 框架 : Setting up prefetching for nested serializers

python - 使用 Python 将大量数据批量插入 SQLite

android - 使用带参数的 SQLite 触发器