Проверьте, существуют ли данные в базе данных MYSQL с помощью SQLAlchemy

Я хочу записать данные из csv-файла. Все работает отлично. При повторном запуске сценария появляется сообщение об ошибке:

IntegrityError: (mysql.соединитель.ошибки.IntegrityError) 1062 (23000):
Дубликат записи’ AAPL ‘для ключа ‘PRIMARY’

Это связано с тем, что записи дублируются. Как я могу проверить, существуют ли уже данные, которые я хочу записать в базу данных,и обработать их? Заголовок csv-файла выглядит следующим образом

тикер isin product_name валютный market_data_source trading_location сектор страны

а данные внутри такие:

AAPL IE00B4BNMY34 Accenture plc USD Yahoo NYSE США компьютерное оборудование

А код такой:

import sqlalchemy as sqlal
import pandas as pd

#csv loader
csv_loader = pd.read_csv('C:/Test.csv', encoding='cp1252', sep=';', index_col=0).dropna()

#connection to mysql database
mysql_engine = sqlal.create_engine('mysql+mysqlconnector://xxx/financialanalysis')
mysql_engine.raw_connection()

metadata = sqlal.MetaData()

#------------------------------
#create table in mysql database
#------------------------------
product  = sqlal.Table('product', metadata,
                       sqlal.Column('ticker', sqlal.String(10), primary_key=True, nullable=False, unique=True),                   
                       sqlal.Column('isin', sqlal.String(12), nullable=True),
                       sqlal.Column('product_name', sqlal.String(80), nullable=True),
                       sqlal.Column('currency', sqlal.String(3), nullable=True),
                       sqlal.Column('market_data_source', sqlal.String(20), nullable=True),
                       sqlal.Column('trading_location', sqlal.String(20), nullable=True),
                       sqlal.Column('country', sqlal.String(20), nullable=True),
                       sqlal.Column('sector', sqlal.String(80), nullable=True),
                       )

metadata.create_all(mysql_engine) 

#Write the data into the mysql database
csv_loader = csv_loader.reset_index()
insert_product_data = product.insert().values(csv_loader.to_dict('records'))
mysql_engine.execute(insert_product_data)

1 ответ