首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从pandas数据帧在MySQL DB中创建新表

问如何从pandas数据帧在MySQL DB中创建新表
EN

Stack Overflow用户
提问于 2018-07-09 05:59:48
回答 0查看 11.5K关注 0票数 4

我最近从使用SQLite来满足我的大部分数据存储和管理需求过渡到了MySQL。我想我终于安装了正确的库来使用Python3.6,但是现在我在从MySQL数据库中的数据帧创建新表时遇到了麻烦。

下面是我导入的库:

代码语言:javascript
复制
import pandas as pd
import mysql.connector
from sqlalchemy import create_engine

在我的代码中,我首先从CSV文件创建一个dataframe (这里没有问题)。

代码语言:javascript
复制
def csv_to_df(infile):
    return pd.read_csv(infile)

然后,我使用这个def函数建立到MySQL数据库的连接:

代码语言:javascript
复制
def mysql_connection():
    user = 'root'
    password = 'abc'
    host = '127.0.0.1'
    port = '3306'
    database = 'a001_db'
    engine = create_engine("mysql://{0}:{1}@{2}:{3}/{4}?charset=utf8".format(user, password, host, port, database))
    return engine

最后,我使用pandas函数"to_sql“在MySQL数据库中创建数据库表:

代码语言:javascript
复制
def df_to_mysql(df, db_tbl_name, conn=mysql_connection(), index=False):
    df.to_sql(con = conn, name = db_tbl_name, if_exists='replace', index = False)

我使用下面这行代码运行代码:

代码语言:javascript
复制
df_to_mysql(csv_to_df(r'path/to/file.csv'), 'new_database_table')

将产生以下错误:

代码语言:javascript
复制
InvalidRequestError: Could not reflect: requested table(s) not available in Engine(mysql://root:***@127.0.0.1:3306/a001_db?charset=utf8): (new_database_table)

我认为这告诉我,在将数据帧中的数据传递到这个表之前,我必须首先在数据库中创建一个表,但我对此并不是百分之百肯定。无论如何,我正在寻找一种在MySQL数据库中创建表的方法,而无需首先手动创建表(我有许多CSV,每个CSV都有50+字段,它们必须作为MySQL数据库中的新表上传)。

有什么建议吗?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51236304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档