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?
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.
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 !!