Je suis toujours accro à l'écriture de python vers MySQL. Cette fois, je vais noter ce à quoi je suis accro.
Utilisez Python pour écrire des données sur MySQL avec csv local localement ou MySQL avec Google Cloud PLatform.
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.
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()
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);
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
)
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