简体   繁体   English

sqlalchemy:将 html 表插入 mysql db

[英]sqlalchemy: Insert html table into mysql db

Im new to python (3) and would like to now the following:我是 python (3) 的新手,现在想了解以下内容:

I'm trying to collect data via pandas from a website and would like to store the results into a mysql database like:我正在尝试通过 Pandas 从网站收集数据,并希望将结果存储到 mysql 数据库中,例如:

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("mysql://python:"+'pw'+"@localhost/test?charset=utf8")

url = r'http://www.boerse-frankfurt.de/devisen'
dfs = pd.read_html(url,header=0,index_col=0,encoding="UTF-8")
devisen = dfs[9] #Select the right table
devisen.to_sql(name='table_fx', con=engine, if_exists='append', index=False)

I'm receiving the following error:我收到以下错误:

.... _mysql.connection.query(self, query) sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (1054, "Unknown column '\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tBezeichnung\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t' in 'field list'") [SQL: 'INSERT INTO tbl_fx ( \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tBezeichnung\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tzum Vortag\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tLetzter Stand\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tTageshoch\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tTagestief\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t52-Wochenhoch\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t52-Wochentief\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tDatum\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\nAktionen\\t\\t\\t\\t ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)'] [parameters: (('VAE Dirham', '-0,5421%', 45321.0, 45512.0, 45306.0, 46080.0, 38550.0, '20.0 .... _mysql.connection.query(self, query) sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (1054, "Unknown column '\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\tBezeichnung\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t' 在'字段列表'") [SQL: '插入 tbl_fx ( \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tBezeichnung\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tzum Vortag\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tLetzter Stand\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tTageshoch\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tTagestief\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t52-Wochenhoch\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t52-Wochentief\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tDatum\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t , \\nAktionen\\t\\t\\t\\t ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)'] [参数: ((' VAE 迪拉姆'、'-0,5421%'、45321.0、45512.0、45306.0、46080.0、38550.0、'20.0 2.2018 14:29:00', None), ('Armenischer Dram', '-0,0403%', 5965339.0, 5970149.0, 5961011.0, 6043443.0, 5108265.0, '20.02.2018 01:12:00', None), .... 2.2018 14:29:00', 无), ('Armenischer Dram', '-0,0403%', 5965339.0, 5970149.0, 5961011.0, 6043443.0, 51082.205.0, 0,205.0.8) ...

How can sqlalchemy INSERT respective data into table_fx? sqlalchemy 如何将各自的数据插入 table_fx? Problem is the header with the multiple \\n and \\t.问题是带有多个 \\n 和 \\t 的标题。

The mysql table hase the following structur: mysql 表具有以下结构:

( name varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, bezeichnung varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL, diff_vortag varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, last double DEFAULT NULL, day_high double DEFAULT NULL, day_low double DEFAULT NULL, 52_week_high double DEFAULT NULL, 52_week_low double DEFAULT NULL, date_time varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, unnamed varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL ) name VARCHAR(10)COLLATE utf8_unicode_ci DEFAULT NULL, bezeichnung VARCHAR(150)COLLATE utf8_unicode_ci DEFAULT NULL, diff_vortag VARCHAR(20)COLLATE utf8_unicode_ci DEFAULT NULL, last双DEFAULT NULL, day_high双DEFAULT NULL, day_low双DEFAULT NULL, 52_week_high双DEFAULT NULL , 52_week_low double DEFAULT NULL, date_time varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, unnamed varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL )

Any help is higly welcome.非常欢迎任何帮助。

Thank you very much in advance非常感谢您提前

Andreas安德烈亚斯

This should do it.这应该这样做。 If you convert to a dataframe you can rename columns first.如果转换为数据框,则可以先重命名列。 The "dfs" entity you were creating was actually a list of dataframe entities.您创建的“dfs”实体实际上是一个数据框实体列表。

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("mysql://python:"+'pw'+"@localhost/test?charset=utf8")

url = r'http://www.boerse-frankfurt.de/devisen'
dfs = pd.read_html(url,header=0,index_col=0,encoding="UTF-8")

devisen = dfs[9].dropna(axis=0, thresh=4) # Select right table and make a DF

devisen.columns = devisen.columns.str.strip() # Strip extraneous characters

devisen.to_sql(name='table_fx', con=engine, if_exists='append', index=False)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM