【问题标题】:MySQL: How do I write query to choose MAX and today date to fetch data from given list and store in DBMySQL:如何编写查询以选择 MAX 和今天的日期以从给定列表中获取数据并存储在数据库中
【发布时间】:2019-03-30 23:31:29
【问题描述】:

我在 mysql 数据库中存储数据时遇到问题。具有列表df = [['Euro', 0.877641, '2018-10-24'], ['British Pound', 0.7752180000000001, '2018-10-24'], ['Indian Rupee', 73.21869000000001, '2018-10-24'], ['Australian Dollar', 1.4135360000000001, '2018-10-24'], ['Canadian Dollar', 1.299316, '2018-10-24']] 列表的变量希望将其存储在最后更新日期的货币名称、日期、值列中。那么我如何在代码中编写该逻辑(我是使用 sql 的 max()、min() 方法。)

试过了:

    import pandas as pd
     import pymysql
    import MySQLdb
        sqlconn = pymysql.connect(host='ip', port=port, user='username',
                                  passwd='pass', db='dbname', autocommit=True)
        # Create a cursor object
        if (sqlconn == None):
            print("conn not found")
        else:
            print("conn is found")


        cursor.execute("INSERT INTO TestCurrencyHistory (currency, date, value) VALUES (%s, %s, %s)") % (
                                              elements
                                            )
        element = cursor.fetchall()

        cursor.close()
        sqlconn.close()
Offcource this is not working. So please help ..

提前谢谢..(如果有任何 python/pandas 逻辑来选择最大和最小日期,请不要告诉我)

【问题讨论】:

  • 你好。您能否详细说明您需要输入/输出数据的问题?

标签: python mysql pandas


【解决方案1】:

使用 mysql-connector,您可以使用 executemany(),但我不确定 pandas 是否支持。这篇文章可能会有所帮助:how to transform pandas dataframe for insertion via executemany() statement?

df = [['Euro', 0.877641, '2018-10-24'], ['British Pound', 0.7752180000000001, '2018-10-24'], ['Indian Rupee', 73.21869000000001, '2018-10-24'], ['Australian Dollar', 1.4135360000000001, '2018-10-24'], ['Canadian Dollar', 1.299316, '2018-10-24']]

获取df的最新日期:

date_list = []
for x in df:
    date_list.append(x[-1])
latest = max(date_list)

# turn into datetime format, not str
latest = datetime.datetime.strptime(latest, '%Y-%m-%d').date()

# increase by one day
next_day = latest + datetime.timedelta(days=1)

我不知道您的 SQL 查询是什么样的,但您可能会执行以下操作以获取第二天的数据:

latest_date_query_results = cursor.execute(
"""
SELECT currency, value, added_date
FROM your_table
WHERE added_date > {}
""".format(next_day)
)

结果应该变成一个元组来处理executemany()

elements = [] 
for x in df:
    elements.append(tuple((x)))
elements = tuple((elements))
print(elements)
# (('Euro', 0.877641, '2018-10-24'), ('British Pound', 0.7752180000000001, '2018-10-24'), ('Indian Rupee', 73.21869000000001, '2018-10-24'), ('Australian Dollar', 1.4135360000000001, '2018-10-24'), ('Canadian Dollar', 1.299316, '2018-10-24'))

那么,你可以这样做:

sql = "INSERT INTO TestCurrencyHistory (currency, date, value) VALUES (%s, %s, %s)"
cursor.executemany(sql, elements)

【讨论】:

  • 要获得有关 max() 部分的帮助,我需要更多关于您正在尝试做什么的信息。您只想插入最新日期的数据吗?
  • 我将该数据转换为:RIC 价格增加 0 欧元,0.877641,2018-10-24 1 英镑,0.775218,2018-10-24 2 印度卢比,73.218690,2018-10-24 3澳元, 1.413536 , 2018-10-24 .........................我想从上一个那里找到最后更新日期,从在该日期旁边要添加上述数据
  • 抱歉,不太确定您到底想做什么。本文介绍如何在 SQL 中获取最新日期:w3resource.com/sql/aggregate-functions/max-date.php
  • 得到了最大日期,想从那个日期的下一个添加数据假设最大日期是 2018-10-20 所以想从 2018-10-21 开始在现有表中添加数据(可能是使用 python, sql,熊猫)
  • 已添加到答案中,希望对您有所帮助!
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 2020-05-12
  • 1970-01-01
  • 2017-06-22
  • 2021-01-30
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多