Невозможно получить данные между 2 датами и временем

#python #mysql #pandas #database #dataframe

#python #mysql #панды #База данных #фрейм данных

Вопрос:

 from pymysql import *
import pandas.io.sql as sql
from datetime import datetime, date, timedelta

current_date = date.today()
print(current_date)

current_date2 = current_date - timedelta(1)
print("Yesterday was: ", current_date2)

# connect the mysql with the python
con = connect(user="root", password="12345", host="localhost", database="test")

df = sql.read_sql('select * from tbl1 where datetime1 >= "2020-11-15" and datetime1 <= '"current_date"' ', con)
# print the data
print(df)
 

Когда я пытаюсь передать DateTime как переменную, она выдает ошибку:

pandas.io.sql.DatabaseError: сбой выполнения sql ‘выберите * из tbl1, где datetime1 >= «current_date2» и datetime1 <= current_date’: (1525, «Неверное значение даты и времени: ‘current_date2′»)

Комментарии:

1. pandas.io.sql.DatabaseError: ошибка выполнения sql ‘select * from tbl1 where datetime1 >= current_date2 и datetime1 <= current_date ‘: (1054, «Неизвестный столбец ‘current_date2’ в предложении ‘where'»)

2. Таблица базы данных, содержащая столбец datetime1 со значениями даты и времени 2020-11-15 08:00:00

Ответ №1:

Попробуйте это:

'select * from tbl1 where datetime1 >= "2020-11-15" and datetime1 <= "{0}"'.format(current_date)

Теперь это должно выглядеть так

df = sql.read_sql('select * from tbl1 where datetime1 >= "2020-11-15" and datetime1 <= "{0}"'.format(current_date), con)

если 2 параметра, то:

df = sql.read_sql('select * from tbl1 where datetime1 >= "{0}" and datetime1 <= "{1}"'.format(current_date2,current_date), con)

Комментарии:

1. df = sql.read_sql(‘select * from tbl1 where datetime1 >=»{0}».format(current_date2) и datetime1 <= «{0}»‘.format(current_date), con) Генерирует ошибку pandas.io.sql.DatabaseError: ошибка выполнения sql ‘select *из tbl1, где datetime1 > = 2020-12-07».format(current_date2) и datetime1 <= «2020-12-07″‘: (1064, ‘ У вас ошибка в синтаксисе SQL; проверьте руководство, которое

2. Если вы хотите установить 2 даты, используйте: df = sql.read_sql(‘выберите * из tbl1, где datetime1 >= «{0}» и datetime1 <= «{1}»‘.format(current_date2,current_date), con)

3. «Это работает для меня»

Ответ №2:

Нет необходимости создавать переменную current_date, просто используйте CURDATE() внутри select .

 conn = pymysq.connect(user,psswd,db,host)
cursor = conn.cursor()
cursor.execute("SELECT * FROM table WHERE datetime1>'2020-11-15' AND datetime1<=CURDATE()")
df = cursor.fetchall()
print (df)
 

Комментарии:

1. startdate =»2020-11-15″ enddate =»2020-11-30″ df = cursor.execute(«ВЫБЕРИТЕ * ИЗ таблицы, ГДЕ datetime1>’ «startdate» ‘ И datetime1<= ‘ «end_date» ‘ «)