SQLite3区分大小写,如python 2.7.12

问题描述 投票:1回答:2

它可能是一个双,但搜索“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区分大小写吗?

python-2.7 sqlite
2个回答
3
投票

你必须首先执行SQL语句"PRAGMA case_sensitive_like = on",然后它应该工作。


1
投票

GLOB运营商可能就是您想要的。

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

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',)]
© www.soinside.com 2019 - 2024. All rights reserved.