#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» ‘ «)