Ich bin immer süchtig danach, von Python nach MySQL zu schreiben. Dieses Mal werde ich notieren, wovon ich süchtig bin.
Verwenden Sie Python, um Daten mit lokalem CSV lokal in MySQL oder MySQL mit Google Cloud PLatform zu schreiben.
Python3 mysql-connector GCP Cloud SQL (MySQL) (diesmal) Die Verbindungsmethode und die SSL-Konvertierung werden diesmal weggelassen. Es geht nur um die Sucht nach SQL-Anweisungen.
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'#Datenbankname
connection = mysql.connector.connect(
port="3306",#Grundsätzlich benutze ich diesen Port oft
host='**.**.**.**',#IP von gcp
user='hogehoge',
password='fugafuda',
db=schema,
charset='utf8',
ssl_ca="./cloudstorage_cert/server-ca.pem",#Ich möchte ein Zertifikat verwenden, geben Sie es diesmal in diesem Ordner an
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
Schlechtes Beispiel
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);
Gutes Beispiel
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
#Schlechtes Beispiel
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
)
#Gutes Beispiel
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
)
Ich vergesse connection.close () nicht, aber manchmal vergesse ich connection.commit () und die Daten werden nicht aktualisiert. Nicht cur.commit (). Beachten Sie, dass commit () für die Verbindung gilt.
Ich bin süchtig nach dem oben genannten. Es funktionierte mit oder ohne; am Ende der SQL-Anweisung
Recommended Posts