它可能是一个双,但搜索“Python sqlite区分大小写”无法获得任何结果。
我在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区分大小写吗?
你必须首先执行SQL语句"PRAGMA case_sensitive_like = on"
,然后它应该工作。
GLOB运营商可能就是您想要的。
GLOB运算符类似于LIKE,但使用Unix文件通配语法作为其通配符。此外,与LIKE不同,GLOB区分大小写。
*
,?
和[…]
(与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',)]