Какова верная реализация множественного выбора в SQLite через LIKE и REGEXP (Python)?
Использую SQLite в Python.
Нужно из БД выбрать все слова, начинающиеся с заглавной буквы.
Один из десятков перебранных вариантов:
Работает, но перечисление кучей LIKE всех букв алфавита выглядит печально:
cur.execute("SELECT * FROM list_words WHERE word LIKE 'А%' OR word LIKE 'Т%')").fetchall() |
cur.execute("SELECT * FROM list_words WHERE word LIKE 'А%' OR word LIKE 'Т%')").fetchall()
Потому хочется что-то вроде такого:
cur.execute("SELECT * FROM list_words WHERE word REGEXP '[А*-Я*]'").fetchall() |
cur.execute("SELECT * FROM list_words WHERE word REGEXP '[А*-Я*]'").fetchall()
- но получаю sqlite3.OperationalError: no such function: REGEXP
Можно как-то определить REGEXP для БД в Python, но использование сторонних пакетов для меня сомнительно, т.к. побаиваюсь бэкдоров ввиду крайне малого опыта в программировании, а в найденных документациях четких для себя инструкций не увидел.
Помогите решить проблему.
Дополнительно:
заглавные буквы идут в кодовых таблицах подряд. По идее, будет достаточно что-то типа:
WHERE substr(word, 1, 1) BETWEEN 'A' AND 'Z'
если таблица word меняется нечасто, добавь в неё отдельный столбец, содержащий первую букву, и сделай индекс по нему. Может значительно ускорить дело.
- Спасибо
Ответы:
select word from list_words where substr(word,1,1)=upper(substr(word,1,1)) |
select word from list_words where substr(word,1,1)=upper(substr(word,1,1))
- Блин. Мне такое даже в голову не пришло. X)
- Vindicar, обычно средствами SQL так и проверяется. Но при желании можно и через regexp
WHERE word REGEXP '^А-ЯЁA-Z'
'Ё' нужно отдельно указывать, т.к. в диапазон А-Я не входит.
Но при наличии upper как-то мало смысла в этом.
Да и базово sqlite вроде regexp не поддерживает, его нужно отдельно ставить, или самому функцию создавать через re. - Спасибо! К сожалению, у меня не работает.
Вариант (substr(word,1,5)=upper(substr(word,1,5))) тоже не срабатывает.
Возможно потому, что у меня каждый элемент в БД имеет вид
('Мазаново',), ('Молчаново',)
?
- Gorgio Govani, Во-первых, "у меня не работает" - это не ответ. Какое сообщение об ошибке? Если нет сообщения, то как ведёт себя программа?
Во-вторых, что значит
Возможно потому, что у меня каждый элемент в БД имеет вид
('Мазаново',), ('Молчаново',)У тебя так представлены данные в БД? Или ты просто сделал print() и увидел незнакомые буквы?
Не путай представление в БД с тем, как эти данные представляются в Питоне после выборки, и с тем, как эти же данные выводятся в консоль. - Vindicar, что так токсично?
Тот код никак не влияет на результаты, что он есть, что его нет.
Сделал print.
Учту на будущее и не буду путать.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для реализации множественного выбора в SQLite через LIKE и REGEXP в Python, необходимо использовать операторы OR и регулярные выражения.
Ниже приведен пример кода на Python, демонстрирующий верную реализацию множественного выбора в SQLite через LIKE и REGEXP:
```python
import sqlite3
import re
# Устанавливаем соединение с базой данных SQLite
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Создаем таблицу с данными
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT)''')
# Вставляем данные в таблицу
cursor.execute("INSERT INTO users (name) VALUES ('Alice')")
cursor.execute("INSERT INTO users (name) VALUES ('Bob')")
cursor.execute("INSERT INTO users (name) VALUES ('Charlie')")
cursor.execute("INSERT INTO users (name) VALUES ('David')")
# Выбираем данные, соответствующие условию множественного выбора
search_terms = ['A%', 'C%'] # Поиск всех имен, начинающихся на 'A' или 'C'
query = "SELECT * FROM users WHERE "
for term in search_terms:
query += "name LIKE ? OR "
query = query[:-4] # Удаляем последний OR
cursor.execute(query, search_terms)
# Выводим результаты
rows = cursor.fetchall()
for row in rows:
print(row)
# Закрываем соединение с базой данных
conn.close()
```
В данном примере мы создаем таблицу `users` с полями `id` и `name`, вставляем в нее данные и затем выбираем все строки, где поле `name` начинается с символов 'A' или 'C' с использованием оператора `LIKE` и множественного условия с помощью цикла.
Таким образом, приведенный код демонстрирует верную реализацию множественного выбора в SQLite через LIKE и REGEXP в Python.