【问题标题】:How to query data from MYSQLdb with Python2.7 if I want query "date-1"?如果我想查询“date-1”,如何使用 Python2.7 从 MYSQLdb 查询数据?
【发布时间】:2018-04-26 04:51:55
【问题描述】:

所以,我每天都需要从 MYSQLdb 查询数据,这就是为什么我更喜欢使用可以查询实际日期的查询 - 1 数据。例如,如果我今天在 11 月 13 日运行我的脚本,我需要 11 月 12 日的所有信息(来自 ACTUAL_DATE - 图片上)。

我在 MYSQLdb 中有一个列,如下所示:

这是任何查询吗,是否有机会使用“DATE - 1”逻辑查询数据?所以我必须分析 ACTUAL_DATE 列中的最后 6 个字符,因为最后 2 个显示日期,最后 4 个显示月份(年份不重要!)

这个 MYSQLdb 每天都会刷新,这就是为什么我需要找到一种方法,我可以从这个表中查询 REAL DATE - 1 天。

我知道代码必须是这样的:

connection = MySQLdb.connect(host='localhost',
        user='user1',
        passwd='',
        db='database1',
        use_unicode=True,
        charset="utf8")
cursor = connection.cursor()
query = """ select #I NEED SOMETHING HERE.. 
    from OSSZES
    into outfile '/tmp/test.csv'
    fields terminated by ';'
    enclosed by '"'
    lines terminated by '\n';
    """
cursor.execute(query)
connection.commit()
cursor.close()

但是如果 mysqldb 中存在这个选择查询,我该如何编写呢?

【问题讨论】:

  • 如果您使用 DATE 或 DATETIME 数据类型,而不是使用看起来像 VARCHAR 的数据类型。你可以使用SELECT * FROM [table] WHERE [column] = NOW() - INTERVAL 1 DAY
  • 是的,但如果我使用的是 NOW(),则返回当前日期和时间。我如何与我的 ACTUAL_DATE 进行比较?
  • 我发布了答案。

标签: python mysql sql debian mysql-python


【解决方案1】:

您可以使用函数 STR_TO_DATE 将 VARCHAR 格式格式化为 DATETIME 格式。

查询

SELECT 
 *
FROM ( 
  # test data replace this with your table name
  SELECT 
   'Sunday, Nov 12' AS A

  UNION ALL  

  SELECT 
    'Saturday, Nov 11'
)
 AS records 
WHERE 
   MONTH(STR_TO_DATE(A, '%W, %b %d')) = MONTH(NOW())
 AND
   DAY(STR_TO_DATE(A, '%W, %b %d')) = DAY(NOW()) - 1

结果

A               
----------------
Sunday, Nov 12  

【讨论】:

  • 这是三选一查询吗?或者它在 python 代码中的表现如何,你能用我的代码更新你的代码吗?
  • 用你的表名替换( # test data replace this with your table name SELECT 'Sunday, Nov 12' AS A UNION ALL SELECT 'Saturday, Nov 11' ) AS records ..不能帮你写python代码,因为我不会写python代码。
  • 这对我来说不是一个好的解决方案,因为这样我只能分析 1 天,但我想在不覆盖我的代码的情况下每天都这样做,这就是我尝试比较 NOW 的原因() 与我的 ACTUAL_DATE 列
【解决方案2】:

也许您可以结合使用“熊猫”和“日期时间”模块:

import datetime as dt
import pandas as pd

df = pd.read_sql_table('OSSZES',connection)
df['ACTUAL_DATE'] = pd.to_datetime(df['ACTUAL_DATE'])
mask = df['ACTUAL_DATE'] < dt.date.today()
df_new = df.loc[mask]
df_new.to_csv('/tmp/test.csv')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2012-12-04
    • 2016-10-04
    • 2013-11-17
    • 2011-10-16
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多