python - 使用没有标头的 pandas 数据框通过 to_sql 写入 mysql
问题描述
我有一个从 excel 表(源)创建的数据框。excel 工作表将没有标题行。
我在 mysql 中有一个已经创建的表(目标)。它总是与 Excel 工作表完全相同的布局。
source_data = pd.read_excel(full_path, sheet_name=sheet_name, skiprows=ignore_rows, header=None)
db_engine = [function the returns my mysql engine]
source_data.to_sql(name=table_name, con=db_engine, schema=schema_name, if_exists='append', index=False)
由于 pandas 在插入语句中使用数字作为列名,因此失败并出现错误。
[SQL: INSERT INTO [tablename] (
0 ,
1) VALUES (%(0)s, %(1)s)]
error=(pymysql.err.OperationalError) (1054, "Unknown column '0' in 'field list'
我怎样才能解决这个问题?我可以使用不同的插入方法吗?我真的必须使用表中正确的列名加载数据框吗?
解决方案
找不到替代品..在读取期间将列名添加到数据框中..
所以首先我构建了列名列表
sql = ("select [column_name] from [table i get my metadata from];")
db_connection = [my connection for sqlalchemy]
result = db_connection.execute(sql)
column_names = []
for column in result:
column_names.append(column[0])
然后我在读取命令中使用该列列表:
source_data = pd.read_excel(full_path, sheet_name=sheet_name, skiprows=ignore_rows,header=None, names=column_names)
然后 to_sql 语句运行没有错误。
推荐阅读
- reactjs - redux 形式的谷歌地图
- jquery - jQuery 验证。验证数组数组
- python - Python:基于 id 和时间范围的对象组列表
- xslt - BizTalk - 如何以编程方式调用 Visual Studio 验证映射并保存 XSLT
- scala - 为什么在 Scala 中这条语句不是 NullPointerException?null.asInstanceOf[双]
- javascript - 2个标准输入,一个只有一次,另一个很多
- matlab - 如何在 Matlab 上保存会话
- vba - 根据单词列表从多列返回精确字符串匹配的函数
- c - 带有预处理器指令的指针
- swift - 错误的接近 UUID