我正在尝试使用 Pandas (v1.3.4)、SQLAlchemy (v1.4.26) 和 PyMySQL (v1.0.2) 写入 MySQL 数据库。我可以使用 pandas 创建一个新表(称为“test_table”)to_sql
方法,但随后尝试写入同一个表会给出:
OperationalError: (pymysql.err.OperationalError) (1050, "Table 'test_table' already exists")
我之前在 SQLite 中完成过此操作,所以我不确定为什么它在 MySQL 中不起作用。这是我的语法问题,还是数据库服务器配置中可能需要更改某些内容?
这是我正在使用的代码。
首先,导入并建立与数据库服务器的连接:
from sqlalchemy import create_engine
import pymysql
import pandas as pd
sqlEngine = create_engine('mysql+pymysql://username:pas[email protected]', pool_recycle=3600)
con = sqlEngine.connect()
建立具体的数据库名称:
sql = '''
USE my_database
'''
con.execute(sql);
生成一个条目并写入一个名为的新表test_table
:
entry = pd.DataFrame({
'PersonID': 0,
'LastName': 'smith',
'FirstName': 'joe',
}, index=[0])
entry.to_sql('test_table', con, if_exists='append')
验证我的条目是否已进入表中:
sql = '''
SELECT *
FROM test_table
'''
pd.read_sql_query(sql, con)
这使:
到目前为止,一切都很好。现在我尝试添加一个新条目test_table
表,使用if_exists='append'
参数,以便新条目将附加到现有表的末尾:
entry = pd.DataFrame({
'PersonID': 1,
'LastName': 'smith',
'FirstName': 'mary',
}, index=[0])
entry.to_sql('test_table', con, if_exists='append')
结果是:
OperationalError: (pymysql.err.OperationalError) (1050, "Table 'test_table' already exists")
[SQL:
CREATE TABLE test_table (
`index` BIGINT,
`PersonID` BIGINT,
`LastName` TEXT,
`FirstName` TEXT
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
为什么 Pandas 试图在这里创建一个新表?我怎样才能强制它附加到现有的表呢?