使用源为 MYSQL 的 Python 检索上个月的数据
Posted
技术标签:
【中文标题】使用源为 MYSQL 的 Python 检索上个月的数据【英文标题】:Retrive data of last month using Python with source as MYSQL 【发布时间】:2021-10-08 11:08:56 【问题描述】:我在使用 python 检索上个月的数据时遇到错误。给定代码的最佳方法是什么?
last_day_of_prev_month = date.today().replace(day=1) - timedelta(days=1)
start_day_of_prev_month = date.today().replace(day=1) - timedelta(days=last_day_of_prev_month.day)
previous_month_data = "SELECT * from " + tableName + " between UsageDateTime " + str(start_day_of_prev_month) + " AND " + str(last_day_of_prev_month)
print(previous_month_data)
mycursor.execute(previous_month_data)
results = mycursor.fetchall()
pd.set_option("display.max_columns",70)
df = pd.DataFrame(results)
print(df)
我无法获得解决方案,我可以做些什么改变。我使用 mysql 作为我的源数据库,使用 Python 3.7.4 作为我的编程语言。
由于错误很大,分两部分发布:
第 1 部分
enter image description here
第 2 部分
enter image description here
【问题讨论】:
分享print(previous_month_data)
的输出
【参考方案1】:
我建议使用 f-strings 进行带变量的 sql 查询:
previous_month_data = f'''SELECT * from tableName WHERE UsageDateTime between start_day_of_prev_month AND last_day_of_prev_month'''
【讨论】:
【参考方案2】:您缺少WHERE
子句:
previous_month_data = "SELECT * FROM " + tableName + " WHERE UsageDateTime BETWEEN '" + str(start_day_of_prev_month) + "' AND '" + str(last_day_of_prev_month) + "'"
但我更喜欢使用?
占位符作为参数并将它们作为元组传递:
previous_month_data = "SELECT * FROM " + tableName + " WHERE UsageDateTime BETWEEN ? AND ?"
mycursor.execute(previous_month_data, (str(start_day_of_prev_month), str(last_day_of_prev_month)))
请注意,如果列UsageDateTime
的数据类型是DATETIME
或TIMESTAMP
,那么您应该使用WHERE UsageDateTime BETWEEN ...
而不是WHERE DATE(UsageDateTime) BETWEEN ...
,否则您将错过该月最后一天的行。
【讨论】:
谢谢!占位符效果很好。另外,我的代码中有 where 子句,但由于一些错误 where 子句在这个问题中被删除。不过,非常感谢!【参考方案3】:UsageDateTime
字段的数据类型是什么。
如果是datetime
,试试这个。
previous_month_data = "SELECT * from " + tableName + " between UsageDateTime CAST(" + str(start_day_of_prev_month) + " AS DATE) AND CAST(" + str(last_day_of_prev_month) + " AS DATE"
【讨论】:
UsageDateTime 的数据类型是日期。每个月结束时会有问题吗?以上是关于使用源为 MYSQL 的 Python 检索上个月的数据的主要内容,如果未能解决你的问题,请参考以下文章