Maison >développement back-end >Tutoriel Python >Python utilise Pandas pour lire les fichiers CSV et les écrire sur MySQL
Résumez les différents problèmes que j'ai rencontrés récemment lors de l'utilisation de Python pour lire et écrire du CSV afin de sauvegarder la base de données.
Tutoriels vidéo mysql associés recommandés : "tutoriel mysql"
Code :
reload(sys) sys.setdefaultencoding('utf-8') host = '127.0.0.1' port = 3306 db = 'world' user = 'root' password = '123456' con = MySQLdb.connect(host=host,charset="utf8",port=port,db=db,user=user,passwd=password) try: df = pd.read_sql(sql=r'select * from city', con=con) df.to_sql('test',con=con,flavor='mysql') except Exception as e: print(e.message)
Si rien d'inattendu ne se produit A La phrase sera imprimée : la saveur de base de données MySQL n'est pas prise en charge
J'ai trouvé la réponse sur stackoverflow : La saveur 'mysql' est obsolète dans la version 0.19 de pandas.
Changeons-la d'une autre manière :
reload(sys) sys.setdefaultencoding('utf-8') host = '127.0.0.1' port = 3306 db = 'world' user = 'root' password = '123456' engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db)) try: df = pd.read_sql(sql=r'select * from city', con=engine) df.to_sql('test',con=engine,if_exists='append',index=False) except Exception as e: print(e.message)
Après l'exécution, ok, vous pouvez enregistrer le paramètre index pour indiquer s'il faut stocker l'index du DataFrame sous forme de colonne. De manière générale, ce n'est pas nécessaire, donc la valeur est False
Maintenant, c'est le cas. il semble que le problème soit résolu Oui, mais il reste encore un petit problème.
Supposons que j'ai un fichier csv contenant du chinois (ma fenêtre) :
nom de la classe d'âge
Xiao Ming 15 ans en première année
Xiao Zhang 18 ans en troisième année
engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db)) try: df = pd.read_csv(r'C:\Users\xx\Desktop\data.csv') print(df) df.to_sql('test', con=engine, if_exists='append', index=False) except Exception as e: print(e.message)
Après l'impression et traitement C'est tronqué. Il est préférable de préciser l'encodage lorsque l'on lit le csv. Mon GBK local :
df = pd.read_csv(r'C:\Users\xx\Desktop\data.csv',encoding='gbk')
Nous pouvons imprimer les informations normalement, mais une erreur est à nouveau signalée. L'erreur est la suivante :
. UnicodeEncodeError : le codec 'latin-1' ne peut pas encoder les caractères en position 0-1 : ordinal pas dans la plage (256)
C'est toujours un problème d'encodage. La raison est que nous n'avons pas spécifié l'encodage lorsque. nous l'avons enregistré dans la base de données. J'ai également été trompé lorsque j'essayais de résoudre ce problème. Tout est disponible sur Internet. Je ne parlerai pas du processus, regardez le code :
engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s?charset=utf8") % (user, password, host, db))
Résolu
Articles associés :
Explication détaillée de la vraie demande IP Pandas pour Analyse des données Python
Explication détaillée de l'analyse des journaux cdn via la bibliothèque pandas en Python
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!