Как я могу использовать Pandas в pu sh periodi c txt данные в Mysql? - PullRequest
0 голосов
/ 01 мая 2020

У меня периодические c текстовые файлы в каталоге; и каждый файл содержит данные временных рядов, я пытаюсь найти способы поместить эти данные в MySQL. Я пытаюсь перебрать файлы и поместить их в MySQL db, но я получаю сообщение об ошибке, вероятно, ему не нравится тип файла list_of_files в виде строки, а не json, et c. Как я могу исправить это?

Или вы можете дать мне различные предложения, если у вас есть. Спасибо.

Мой каталог;

...
Apr 29 12:51 file_2020-04-29_12:45:00.txt
Apr 29 12:55 file_2020-04-29_12:50:00.txt
Apr 29 13:01 file_2020-04-29_12:55:00.txt
Apr 29 13:06 file_2020-04-29_13:00:00.txt
Apr 29 13:11 file_2020-04-29_13:05:00.txt
Apr 29 13:16 file_2020-04-29_13:10:00.txt
Apr 29 13:21 file_2020-04-29_13:15:00.txt
Apr 29 13:26 file_2020-04-29_13:20:00.txt
Apr 29 13:31 file_2020-04-29_13:25:00.txt
Apr 29 13:36 file_2020-04-29_13:30:00.txt
Apr 29 13:41 file_2020-04-29_13:35:00.txt
Apr 29 13:46 file_2020-04-29_13:40:00.txt
Apr 29 13:51 file_2020-04-29_13:45:00.txt
Apr 29 13:56 file_2020-04-29_13:50:00.txt

Содержимое каждого файла, как;

[neg@nik:/cnp-cnx]# head file_2020-04-29_13:55:00.txt
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_bskhdra1_lnk01,True,1753359343,2374.0,1753359344,2375.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_bskhdra1_lnk02,True,1753359343,2371.0,1753359344,2370.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_bskhdra1_lnk03,True,1753359343,2374.0,1753359344,2376.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_bvhdra01_lnk01,True,1753359343,2377.0,1753359344,2377.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_bvhdra01_lnk02,True,1753359343,2369.0,1753359344,2364.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_bvhdra01_lnk03,True,1753359343,2362.0,1753359344,2361.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_mbhdra01_lnk01,True,1753359343,1629.0,1753359344,1631.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_mbhdra01_lnk02,True,1753359343,1634.0,1753359344,1632.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_mbhdra01_lnk03,True,1753359343,1633.0,1753359344,1632.0
2020-04-29 13:55:00,BSKHDEA1_SPS/Diameter Link:Link name=bskhdea1_ipx_ibasis1_asd_lnk02,True,1753359343,3871.0,1753359344,3869.0

Метод, который я пробовал;

import mysql.connector
import glob
import os
import pandas as pd

list_of_files = glob.glob('/cnp-cnx*.txt')

cnx = mysql.connector.connect(user='user', password='password',host='10.10.1.10',database='database')
cur = cnx.cursor(buffered=True)

for i in list_of_files:
  data = pd.read_csv(i, header=None)
  cur.execute("""INSERT INTO table1 (DATETIME, NODE, COND, COUNTER1, C1753359343, COUNTER2, C1753359344) VALUES ( %s,%s,%s,%s,'%s',%s,'%s' )""", ( data[0].values, data[1].values, data[2].values,data[3].values, data[4].values, data[5].values,data[6].values ) )


>>> for i in list_of_files:
...   data = pd.read_csv(i, header=None)
...   cur.execute("""INSERT INTO table1 (DATETIME, NODE, COND, COUNTER1, C1753359343, COUNTER2, C1753359344) VALUES ( %s,%s,%s,%s,'%s',%s,'%s' )""", ( data[0].values, data[1].values, data[2].values,data[3].values, data[4].values, data[5].values,data[6].values ) )
... 
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/site-packages/mysql/connector/cursor_cext.py", line 248, in execute
    prepared = self._cnx.prepare_for_mysql(params)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/site-packages/mysql/connector/connection_cext.py", line 626, in prepare_for_mysql
    result = self._cmysql.convert_to_mysql(*params)
_mysql_connector.MySQLInterfaceError: Python type numpy.ndarray cannot be converted

1 Ответ

0 голосов
/ 01 мая 2020

Вы можете попробовать pandas -функцию to_sql с параметром if_exists = 'append':

for i in list_of_files:
    data = pd.read_csv(i, header=None)
    data = data[["DATETIME", "NODE", "COND", "COUNTER1", "C1753359343", "COUNTER2", "C1753359344"]]
    data.to_sql(name='table1', con=engine, if_exists = 'append', index=False)

, чтобы узнать, как настроить объект механизма: Запись в базу данных MySQL с pandas с использованием SQLAlchemy, to_ sql

...