Поиск даты по параметру 'LIKE' - PullRequest
0 голосов
/ 22 декабря 2018

Я создаю небольшую программу на Python и SQlite, где клиент может ввести дату в формате YYYY-MM-DD и вернуть все пьесы, которые происходят в эту конкретную дату.Все пьесы хранятся в Play.db, который сохраняет дату как: ГГГГ-ММ-ДД ЧЧ: ММ

Я не хочу, чтобы пользователь вводил точную дату с указанием часов и минут.Он просто должен набрать год-месяц-день, и все пьесы в эту конкретную дату должны появиться.

Я понимаю, что мне нужно ключевое слово "LIKE", и я передаю свою переменную между "%" и переменной "%".чтобы получить аналогичное (не точное) совпадение.Однако я не уверен, как это сделать, используя синтаксис моего запроса SQLite:

    user_input = input("Please, type the date of the play in format: 'YYYY-MM-DD':")
    search_date = """SELECT * FROM play WHERE play_date LIKE ? """
    cursor.execute(search_date, [(user_input)])
    results = cursor.fetchall()

Проблема заключается в том, что «результаты» не заполняются, поскольку запрос SQL ищет точное совпадение.

ПОЭТОМУ я пытался использовать% user_input% или%?%, Но, как ни странно, переменная '% user_input%' или%?% Не определена.

Я понимаю, как логически это должно быть сделано:

как искать похожие строки в SQLite

Но я не уверен, как "LIKE"% 'переменная'% '"может быть получена с использованием моего синтаксиса кода.

Ответы [ 4 ]

0 голосов
/ 24 декабря 2018

Вам нужна функция даты.Также вы можете использовать нарезку для строки.Нравится:

theDate = input() #example: 2018-12-24
Year = theDate[:3]
Month = theDate[5:6]
Day = theDate[8:9]
0 голосов
/ 22 декабря 2018
import datetime
user_input = datetime.datetime(input("Please, type the date of the play in format: 'YYYY-MM-DD':"), '%Y-%m-%d')
# 2011-11-11
search_date = f'SELECT * FROM play WHERE play_date LIKE {user_input}'
print(search_date)
# SELECT * FROM play WHERE play_date LIKE 2011-11-11

Это то, что вы ищете?

Отредактировано для предотвращения инъекций sql

0 голосов
/ 22 декабря 2018

Используйте функцию date в своем запросе, чтобы просто сравнить даты ваших сохраненных значений даты и времени и пользовательский ввод.

SELECT * FROM play WHERE date(play_date) = date(?)
0 голосов
/ 22 декабря 2018

Добрый день, ну, может быть, это не совсем то, что вы хотите, но я бы поделился с вами некоторыми фрагментами кода, которые я написал, когда хотел создать что-то подобное, но на этот раз с использованием Flask и SQLAlchemy.

Сначалачтобы преобразовать данные в дату / дату и время, чтобы убедиться, что данные действительны

converted_date = datetime.datetime.strptime(user_input, "%Y-%m-%d").date()

Преобразовать в обычный запрос SQL должно быть

SELECT * FROM play WHERE play_date LIKE {"%" + converted_date}

Обратите внимание, что "%" очень важнои поставить его в начале означает, что вы хотите найти любую дату, которая начинается с введенной даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...