2016-12-15 24 views
0

Я пытаюсь написать базу данных pandas в базу данных mysql с помощью pandas. Это отлично работает для меня с помощьюПишите Pandas Dataframe через SQLAlchemy в базе данных MySQL

to_sql

Но то, что я хочу, чтобы написать дату, тикер и adj_close в тесте стола на моем собственном, используя SQLAlchemy. Как-то я пытался это сделать, но он не работает. используя следующее:

ins = test.insert() 

ins = test.insert().values(date=DataLevels['Date'], ticker=DataLevels['ticker'], adj_close=DataLevels['adj_close']) 
ins.compile().params 
mysql_engine.execute(ins) 

С его помощью я получаю следующее сообщение об ошибке:

(mysql.connector.errors.ProgrammingError) Сбой обработки pyformat-параметров; Python 'series' не может быть преобразован в MySQL type [SQL: 'INSERT INTO test (date, ticker, adj_close) VALUES (% (date) s,% (тикер) s,% (adj_close) s)'] [ параметры: { 'тикер': 0
AAPL

ли имеет ключ, как это может работать anbody? Код ниже wothout кодовые части упоминались выше:

import sqlalchemy as sqlal 
import pandas_datareader.data as pdr 
import pandas as pd 

mysql_engine = sqlal.create_engine('mysql+mysqlconnector://xxx') 
mysql_engine.raw_connection() 

metadata = sqlal.MetaData() 

test = sqlal.Table('test', metadata, 
           sqlal.Column('date', sqlal.DateTime, nullable=True), 
           sqlal.Column('ticker', sqlal.String(10), sqlal.ForeignKey("product.ticker"), nullable=True), 
           sqlal.Column('adj_close', sqlal.Float, nullable=True), 
           ) 

metadata.create_all(mysql_engine) 

DataLevels = pdr.DataReader(['ACN','AAPL','^GDAXI'], 'yahoo', '2016-11-19', '2016-12-1') 
DataLevels = pd.melt(DataLevels['Adj Close'].reset_index(), id_vars='Date', value_name='adj_close', var_name='minor').rename(columns={'minor': 'ticker'}) 

ответ

1

Чтобы вставить несколько строк в одном INSERT, не пропускает Series для каждого столбца, передать список записей.

test.insert().values(DataLevels[['Date', 'ticker', 'adj_close']].to_dict('records')) 
+0

благодарит за помощь. теперь я получаю следующее сообщение об ошибке: 'Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (' financialanalysis'.'market_price_data', CONSTRAINT 'market_price_data_ibfk_1' FOREIGN KEY (' ticker') СПИСОК ЛИТЕРАТУРЫ 'product' (' ticker')) [SQL: 'INSERT INTO' – MCM

+0

Это похоже на проблему целостности данных. Строки, которые вы вставляете, нарушают ограничение внешнего ключа в вашей схеме. Не зная всех связей таблицы, я не могу больше помочь. –

+0

Спасибо за ответ. Я обновил свой код выше, который содержит сообщение об ошибке. – MCM

Смежные вопросы