web-dev-qa-db-fra.com

Pandas Insérer des données dans MySQL

J'essaie d'insérer des colonnes de données extraites du fichier .csv dans MySQL à l'aide de Pandas (Python).

Voici mon code que j'ai jusqu'à présent.

import pandas as pd
from pandas.io import sql
from sqlalchemy import create_engine
engine = create_engine('mysql://username:password@localhost/dbname')
with engine.connect() as conn, conn.begin():

df = pd.read_csv('File.csv', usercols=['ID', 'START_DATE'], skiprows=skip)
print(df)

df.to_sql(con=con, name='Table1', if_exists='replace', flavor='mysql')

Mais, il ne mentionne pas de noms de colonnes spécifiques dans Table1. 

Comment pouvons-nous exprimer cela?

4
King Java

Je pense que votre code devrait se lire comme ça 

import pandas as pd
from pandas.io import sql
from sqlalchemy import create_engine

df = pd.read_csv('File.csv', usercols=['ID', 'START_DATE'], skiprows=skip)
print(df)

engine = create_engine('mysql://username:password@localhost/dbname')
with engine.connect() as conn, conn.begin():
    df.to_sql('Table1', conn, if_exists='replace')

Mais, en ce qui concerne votre question, à moins que je ne me trompe dans ma compréhension des Pandas, quelles que soient les colonnes df, ont été écrites dans les colonnes du même nom de la table mysql. 

Si vous avez besoin de noms de colonne différents, vous voudrez renommer ceux de DataFrame.

Ou utilisez les paramètres, comme mentionné

index : boolean, valeur par défaut True
Écrit l’index DataFrame sous forme de colonne.

index_label : chaîne ou séquence, valeur par défaut Aucune
Libellé de colonne pour la ou les colonnes d'index. Si None est donné (valeur par défaut) et que l'index est True, les noms d'index sont utilisés.

6
cricket_007

C'est ce que j'ai fait dans mon projet

 import pandas as pd
 import sqlalchemy
 engine = sqlalchemy.create_engine('mysql+pymysql://root:@localhost/pd_test')

 ratings = pd.read_csv('ratings2.csv', sep='\t', encoding='latin-1',
                  usecols=['user_id', 'movie_id', 'user_emb_id', 
 'movie_emb_id','rating'])

 ratings.to_sql('test', con=engine, if_exists='append',index=False,chunksize=1)

J'espère que cette aide !!

1
Adnan shah