SQLite3区分大小写,如python 2.7.12

时间:2018-02-28 22:17:40

标签: python-2.7 sqlite

它可能是双重的,但是搜索" Python sqlite区分大小写,如#34;无法获得任何结果。

我在python 2.7上的sqlite 3模型中遇到了区分大小写LIKE查询的问题。问题看起来像这样:LIKE with%是不区分大小写的。

这是一个例子:

import sqlite3

db = sqlite3.connect("test.db")
db.execute("""CREATE TABLE IF NOT EXISTS rec(
                id        INTEGER PRIMARY KEY AUTOINCREMENT,
               name   TEXT );""")
db.commit()
for name in "ABC", "abc", "Abc", "aBC":
    db.execute("INSERT INTO rec(name) VALUES(?);",(name,))

print "A%",db.execute("SELECT name FROM rec WHERE name LIKE ?;",("A%",)).fetchall()
print "a%",db.execute("SELECT name FROM rec WHERE name LIKE ?;",("a%",)).fetchall()

结果令人惊讶:

A% [(u'ABC',), (u'abc',), (u'Abc',), (u'aBC',)]
a% [(u'ABC',), (u'abc',), (u'Abc',), (u'aBC',)]

是否可以告诉sqlite区分大小写?

2 个答案:

答案 0 :(得分:3)

首先必须执行SQL语句"PRAGMA case_sensitive_like = on",然后才能运行。

答案 1 :(得分:1)

GLOB 运算符可能就是您想要的。

  

GLOB运算符类似于LIKE但使用Unix文件通配符   其通配符的语法。此外, GLOB区分大小写,与LIKE不同。

     

The LIKE, GLOB, REGEXP, and MATCH operators

  • 注意最常见的通配符是 * ? […] (如反对LIKE的%_)。

所以: -

print "A*",db.execute("SELECT name FROM rec WHERE name GLOB ?;",("A*",)).fetchall()
print "a*",db.execute("SELECT name FROM rec WHERE name GLOB ?;",("a*",)).fetchall()

应该不那么令人惊讶并导致: -

A% [(u'ABC',), (u'Abc',)]
a% [(u'abc',), (u'aBC',)]