Pandas `to_sql` выдает ошибку `Таблица уже существует` с `if_exists = 'append'`Python

Программы на Python
Ответить
Anonymous
 Pandas `to_sql` выдает ошибку `Таблица уже существует` с `if_exists = 'append'`

Сообщение Anonymous »

Я пытаюсь выполнить запись в базу данных MySQL с помощью Pandas (v1.3.4), SQLAlchemy (v1.4.26) и PyMySQL (v1.0.2). Я могу создать новую таблицу (называемую «test_table»), используя метод pandas 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:password@127.0.0.1', 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 пытается создать здесь новую таблицу? Как я могу вместо этого заставить его добавиться в существующую таблицу?


Подробнее здесь: https://stackoverflow.com/questions/699 ... sts-append
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»