使用源为 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 的数据类型是DATETIMETIMESTAMP,那么您应该使用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 检索上个月的数据的主要内容,如果未能解决你的问题,请参考以下文章

Python Pypi 修改 国内源(以豆瓣源为例)

如何使用 Python 和 MySQL 连接器检索数据

Python设置pip源为国内源及简单操作

Python设置pip源为国内源及简单操作

一行代码指定python下载源为清华源只需修改一次

使用 JPA 检索多个对象