python mysql

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)

数据库结构如下

img

看一下你的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查询语句,这样就可以解决你的问题了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^