Maison >développement back-end >Tutoriel Python >Python utilise Pandas pour lire les fichiers CSV et les écrire sur MySQL

Python utilise Pandas pour lire les fichiers CSV et les écrire sur MySQL

高洛峰
高洛峰original
2017-03-24 17:09:025039parcourir

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

Tutoriel sur l'utilisation du framework pandas de Python pour manipuler des données dans Excel fichiers

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn