Поиск даты в sqlite, сохраненной как TEXT - Выполнение больше, равно или меньше операций - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь получить все объекты в моей базе данных с датой, превышающей заданное значение cerain.

Я использую базу данных sqlite, поэтому дата (record_date) выражается как TEXT.

Моя база данных построена следующим образом:

conn = sqlite3.connect('my_database.db')
    c = conn.cursor()
    c.execute("""
                INSERT INTO MY_TABLE (rating, record_date, url)
                     VALUES
                     (3, "2016-01-11", "www.site1.com"),
                     (3, "2016-01-04", "www.site2.com"),
                     (10, "2017-11-21", "www.site3.com"),
                     (0, "2017-04-30", "www.site4.com"),
                     (3, "2017-03-17", "www.site5.com"),
                     (1, "2016-03-29", "www.site6.com"),
                     (4.5, "2016-02-01", "www.site7.com"),
                     (3.2, "2016-02-12", "www.site8.com"),
                     (9, "2019-01-01", "www.site9.com"),
                     (6, "2017-10-04", "www.site10.com"),
                     (7, "2018-08-07", "www.site11.com"),
                     (8, "2018-06-07", "www.site12.com"),
                     (3, "2016-06-13", "www.site13.com"),
                     (2, "2017-09-02", "www.site14.com"),
                     (3, "2017-05-30", "www.site15.com")
              """)
    conn.commit()

Мой запрос, написанный на python, выглядит следующим образом:

db = sqlite3.connect(database_name)

cursor.execute("SELECT * FROM my_table WHERE strftime(record_date,'%Y-%m-%d') > ?",
(min_date_final,))
return self.cursor.fetchall()

min_date_final - строка, выраженная как год-месяц-день. Пример: "2017-02-12"

Я подумал, что strftime будет достаточно, чтобы преобразовать дату ТЕКСТ в дату, когда я смогу выполнить =,>, <операции, но я что-то упустил. </p>

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

У вас есть дата и формат в неправильном порядке

SELECT * 
FROM my_table 
WHERE strftime('%Y-%m-%d', record_date) > strftime('%Y-%m-%d', ?)
0 голосов
/ 12 июня 2019

Попробуйте использовать pandas и sqlite.


import pandas as pd
import sqlite3

conn = sqlite3.connect('my_database.db')
query = "SELECT * FROM my_table WHERE record_date > "2017-02-12;"

df = pd.read_sql_query(query,conn)

, если ваш банк данных sqlite имеет странный формат даты, пропустите команду where, загрузите все и отфильтруйте ее позже в python.

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