MySQL: как мне написать запрос, чтобы выбрать MAX и сегодняшнюю дату, чтобы получить данные из данного списка и сохранить в БД - PullRequest
0 голосов
/ 26 октября 2018

У меня проблема с хранением данных в базе данных 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']], хочет сохранить это в столбце currency_name, date, value с последней обновленной даты.Так как я мог написать эту логику в коде (мой метод max (), min () sql.)

tryied:

    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 ..

спасибо заранее .. (пожалуйста, дайтеменя нет, если есть какая-либо логика питона / панды, чтобы выбрать максимальную и минимальную дату)

1 Ответ

0 голосов
/ 26 октября 2018

С помощью mysql-соединителя вы можете использовать executemany(), но я не уверен, что pandas это поддерживает. Этот пост может помочь: как преобразовать pandas dataframe для вставки с помощью оператора executemany ()?

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...