2016-12-26 22 views
0

私はcsvファイルからデータを書きたいと思います。すべてうまく動作します。スクリプトをもう一度実行すると、エラーメッセージが表示されます。SQLAlchemyを使用してMYSQLデータベースにデータが存在するかどうか確認してください

IntegrityError: (mysql.connector.errors.IntegrityError) 1062 (23000): Duplicate entry 'AAPL' for key 'PRIMARY'

これはエントリが重複しているためです。データベースに書き込むデータがすでに存在し、それを処理しているかどうかを今すぐ確認するにはどうすればよいですか? csvファイルのヘッダーには、この

ticker isin product_name currency market_data_source trading_location country sector

と、このような内部のデータのようになります。

AAPL IE00B4BNMY34 Accenture plc USD Yahoo NYSE USA Computer Hardware

そして、このようなコード:

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) 
+0

持っを使用して、それを解決しましたInsertの代わりにSQL Mergeステートメントを使用することを検討しましたか?これにより、既存のすべてのキーをデータベースからPythonプログラムに引き出してチェックする必要がなくなります。また、新しいデータがある場合に行を更新することもできます。 – CJC

+0

@CJC、あなたには例がありますか? – MCM

+0

@CJC MySQLのMERGEは – e4c5

答えて

0

LOAD DATA LOCAL INFILE

関連する問題