[英]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.