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

高洛峰
Libérer: 2019-02-23 16:27:47
original
5054 Les gens l'ont consulté

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)
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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')
Copier après la connexion

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))
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal