首页 > 解决方案 > 如何解决使用 sqlalchemy 连接执行 pandas.to_sql() 时遇到的 InvalidRequestError?

问题描述

我正在尝试替换 MySQL 数据库中的现有表。我使用以下代码将调用的数据框转换frame为数据库表:

import pandas as pd
import sqlalchemy
from sqlalchemy.types import VARCHAR
database_username = 'root'
database_password = '1234'
database_ip       = 'localhost'
database_name     = 'my_new_database'
database_connection = sqlalchemy.create_engine('mysql+mysqlconnector://{0}:{1}@{2}/{3}'.format(database_username, database_password, database_ip, database_name),pool_size=3,pool_recycle=3600)
frame.to_sql(schema=database_name,con=database_connection,name='table1',if_exists='replace',chunksize=1000,dtype={'Enrollment No': VARCHAR(frame.index.get_level_values('Enrollment No').str.len().max())})

table1成功创建。但是当我重新运行上述代码的最后一行时frame.to_sql(),它会抛出以下错误:

InvalidRequestError: Could not reflect: requested table(s) not available in Engine(mysql+mysqlconnector://root:***@localhost/my_new_database) schema 'my_new_database': (table1)

我想知道为什么当表已经存在时会抛出这个错误,即使我已经使用过if_exists='replace',为什么它只在第一次创建表时才能正常工作。必须做些什么来避免出现此错误?

注意:对类似问题的回答只建议使用小写的表名,我将表命名为'table1'.

标签: python-3.xsqlalchemy

解决方案


推荐阅读