python3连接MYSQL查询问题
代码如下,执行sql1正常,执行sql2就不行了,这个时间格式怎么改都不对,请教一下如何处理。
写DT>(2023-08-05) and DT<(2023-09-01) 可以执行,
写DT>(2023-08-05 00:00:00) and DT<(2023-09-01 00:00:00)就报错了
import pandas as pd
import sqlalchemy as sql
import time
import datetime
engine = sql.create_engine('mysql+pymysql://aaa1:aaaa@127.0.0.1:3306/db_his')
#查询语句
sql1 = '''SELECT * FROM db_his.float where DT>(2023-08-05) and DT<(2023-09-01) order by DT desc limit 1'''
sql2 = '''SELECT * FROM db_his.float where DT>(2023-08-05 00:00:00) and DT<(2023-09-01 00:00:00) order by DT desc limit 1'''
df = pd.read_sql(sql1,engine)
print(df)
数据库结构如下
看一下你的DT是什么类型的字段
你的第二条语句可以把日期放在变量里,用mysql的strfitime,看看这个链接:https://blog.csdn.net/qq_42039607/article/details/80332829
start_date = datetime.datetime(2023, 8, 5, 0, 0, 0)
end_date = datetime.datetime(2023, 9, 1, 0, 0, 0)
sql2 = f"SELECT * FROM db_his.float WHERE DT > '{start_date.strftime('%Y-%m-%d %H:%M:%S')}' AND DT < '{end_date.strftime('%Y-%m-%d %H:%M:%S')}' ORDER BY DT DESC LIMIT 1"
【以下回答由 GPT 生成】
你遇到的问题在于时间格式的错误。在SQL查询语句中,你需要将日期和时间值用引号括起来,以使其在SQL语句中被解析为字符串。下面是解决问题的方法:
sql2 = '''SELECT * FROM db_his.float where DT > '2023-08-05 00:00:00' and DT < '2023-09-01 00:00:00' order by DT desc limit 1'''
注意,日期和时间值需要用单引号或双引号括起来,这样才能正确解析为字符串。通过对时间值使用引号,你可以确保MySQL正确地解析时间条件。
重新运行你的代码,并使用更新后的sql2
查询语句,这样就可以解决你的问题了。