【问题标题】:Retrive data of last month using Python with source as MYSQL使用源为 MYSQL 的 Python 检索上个月的数据
【发布时间】: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)的输出

标签: python mysql sql mysql-python mysql-connector


【解决方案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 的数据类型是日期。每个月结束时会有问题吗?
    猜你喜欢
    • 2021-07-11
    • 2017-03-17
    • 1970-01-01
    • 2021-07-15
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多