[PYTHON] Points sur lesquels je suis souvent accro à l'écriture en tant que débutant MySQL

Je suis toujours accro à l'écriture de python vers MySQL. Cette fois, je vais noter ce à quoi je suis accro.

Image du contenu de la mise en œuvre

Utilisez Python pour écrire des données sur MySQL avec csv local localement ou MySQL avec Google Cloud PLatform.

environnement

Python3 mysql-connector GCP Cloud SQL (MySQL) (cette fois) La méthode de connexion et la conversion SSL sont omises cette fois. Il s'agit uniquement de la dépendance des instructions SQL.

Code à écrire

main.py


# -*- coding: utf-8 -*-
import os
import sys
import time
import glob
import shutil
import datetime
import logging
import traceback
import pandas as pd
import mysql.connector
import ssl
ssl.match_hostname = lambda cert, hostname: True
                
def insert_sql():
    schema = 'hogehoge2'#nom de la base de données
    connection = mysql.connector.connect(
                        port="3306",#En gros, j'utilise souvent ce port
                        host='**.**.**.**',#IP de gcp
                        user='hogehoge',
                        password='fugafuda',
                        db=schema,
                        charset='utf8',
                        ssl_ca="./cloudstorage_cert/server-ca.pem",#Je veux utiliser un certificat, alors spécifiez-le dans ce dossier cette fois
                        ssl_cert="./cloudstorage_cert/client-cert.pem",
                        ssl_key="./cloudstorage_cert/client-key.pem"
    )
    
    df = pd.read_csv(filename,engine="python")
    for r in range(df.shape[0]):
        cur = connection.cursor()
        sql = "insert into schema.table (col1,col2,col3,col4) values ('%s','%s',%s,%s);"%(
                    datetime.datetime.now(),
                    str(datetime.datetime.now()),
                    100,
                    1.5
                )
        print(sql)
        cur.execute(sql)
        cur.close()
        connection.commit()
    connection.close()
    print("done")

if __name__ == '__main__':
    insert_sql()

Point d'attention

1. Lorsque vous spécifiez la table, décrivez correctement le schéma (db)

my.sql


Mauvais exemple
insert into mytable (datetime,col2,col3,col4) values ('2020-10-20 10:39:13.252105','2020-10-20 10:39:13.252105',100,1.5);
Bon exemple
insert into myshema.mytable (datetime,col2,col3,col4) values ('2020-10-20 10:39:13.252105','2020-10-20 10:39:13.252105',100,1.5);

2. Mettez les caractères non numériques tels que les chaînes et les heures entre guillemets simples dans les instructions SQL.

example.py


#Mauvais exemple
sql = "insert into myshema.mytable (datetime,col2,col3,col4) values (%s,%s,%s,%s);"%(
                    temp.loc[r,"DateTime"],
                    str(temp.loc[r,"DateTime"]),
                    100,
                    1.5
                    )
#Bon exemple
sql = "insert into myshema.mytable (datetime,col2,col3,col4) values ('%s','%s',%s,%s);"%(
                    temp.loc[r,"DateTime"],
                    str(temp.loc[r,"DateTime"]),
                    100,
                    1.5
                    )

3. Les données ne sont pas reflétées sauf si commit () est fait pour la connexion

Je n'oublie pas connection.close (), mais parfois j'oublie connection.commit () et les données ne sont pas mises à jour. Ne pas cur.commit (). Notez que commit () sur la connexion.

Je suis accro à ce qui précède. Cela fonctionnait avec ou sans le; à la fin de l'instruction SQL

Recommended Posts

Points sur lesquels je suis souvent accro à l'écriture en tant que débutant MySQL
Des mots qui m'intéressaient en tant que débutant en programmation
Attaques suspectes survenues dès que j'ai lancé un blog sur EC2
En tant que débutant, j'ai cherché dans le répertoire / proc
Résumé des points à garder à l'esprit lors de l'écriture d'un programme qui s'exécute sur Python 2.5
python Extraction de condition de la liste que j'oublie souvent
J'obtiens [Erreur 2055] en essayant de me connecter à MySQL avec Heroku
J'ai fait un générateur de réseau neuronal qui fonctionne sur FPGA
Points qui ont trébuché sur GORM
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
Exécutez une application Java qui réside sur AWS EC2 en tant que démon
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
J'ai essayé d'installer MySQL sur une machine virtuelle Linux sur OCI Compute