最近,我从使用sqlite来满足大部分数据存储和管理需求过渡到mysql。我想我终于安装了正确的库来使用python3.6,但是现在我很难从mysql数据库中的dataframe创建新表。
以下是我导入的库:
import pandas as pd
import mysql.connector
from sqlalchemy import create_engine
在我的代码中,我首先从csv文件创建一个Dataframe(这里没有问题)。
def csv_to_df(infile):
return pd.read_csv(infile)
然后我使用以下def函数建立到mysql数据库的连接:
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\ u sql”在mysql数据库中创建数据库表:
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)
我使用以下行运行代码:
df_to_mysql(csv_to_df(r'path/to/file.csv'), 'new_database_table')
将产生以下错误:
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)
我想这是在告诉我,在将dataframe中的数据传递给这个表之前,必须首先在数据库中创建一个表,但我不是100%肯定。不管怎样,我正在寻找一种在mysql数据库中创建表的方法,而不必首先手动创建表(我有许多csv,每个csv有50多个字段,它们必须作为mysql数据库中的新表上传)。
有什么建议吗?
2条答案
按热度按时间n8ghc7c11#
这
在特定的架构中使用oracledb时不会出错,但如果权限有限,则不会工作。注意表名是区分大小写的。
lpwwtiir2#
我采用了上面aws\u学徒建议的方法,即先创建表,然后将数据写入表。
下面的代码首先从df(自动定义表名和数据类型)自动生成一个mysql表,然后将df数据写入该表。
我必须克服几个小问题,例如:未命名的csv列,为mysql表中的每个字段确定正确的数据类型。
我相信有很多其他的方法可以做到这一点,但这似乎是可行的。