J'ai essayé de pousser et d'exécuter un programme python pour me connecter à MySQL en utilisant ClearDB de Heroku, mais je n'ai pas pu me connecter avec le message ʻerror 2055 Lost connection ~ `.
En conséquence, ce n'était pas une erreur liée à MySQL, mais à la façon dont le programme a été écrit, mais je voudrais le résumer pour ceux qui souffrent du même problème.
--Comment définir ClearDB
Au début, après avoir ajouté ClearDB, je pensais que certains paramètres étaient nécessaires, j'ai donc étudié diverses choses et essayé la migration, etc. Cependant, j'ai pu me connecter à ClearDB lui-même, et même si j'exécutais le programme qui fonctionne en se connectant uniquement à la base de données, aucune erreur ne s'est produite et je ne pouvais pas comprendre la cause.
À ce moment-là, j'ai trouvé cet article et l'ai lu d'une manière ou d'une autre, mais comme une cause d'échec de l'opération SQL ** Lors de l'exécution d'une requête après la déconnexion ** Était écrit. Je l'ai pris pour acquis et j'ai essayé de continuer, mais j'ai soudainement regardé mon code et j'ai découvert que c'était la cause.
Parce que mon code a été fait comme ceci:
main.py
#Importation de module
#Programme d'importation pour les opérations de base de données
import database
#Traitement principal
#Appel de fonction dans la base de données
database.get_data()
database.py
import mysql.connector
#Définissez la destination de la connexion et connectez-vous
def get_data():
#Exécuter l'ordre
connection.commit()
connection.close()
Sur cette base, si vous jetez un œil à cet article, le code écrit en dehors de la fonction sera exécuté lors de l'importation de database
. ..
En d'autres termes, la ʻimport database de
main.pyse connectera à SQL une fois, mais la fonction
get_data ()de
database.py n'est pas exécutée car elle est seulement définie, et la dernière
connexion Le flux est que la connexion est fermée avec .close () `.
Après cela, lorsque j'ai appelé la fonction avec database.get_data ()
dans main.py
, la connexion était déjà déconnectée, donc bien sûr la requête n'a pas pu être exécutée et une erreur s'est produite.
Même si vous exécutez uniquement database.py
, il est compréhensible qu'aucune erreur ne se produise car il déconnecte simplement la connexion sans rien faire après la connexion.
J'ai donc modifié le code comme ci-dessous et essayé de me déconnecter en appelant la fonction, et j'ai pu me connecter sans aucune erreur.
main.py
#Importation de module
#Programme d'importation pour les opérations de base de données
import database
#Traitement principal
#Appel de fonction dans la base de données
database.get_data()
#ajouter à
database.close_db()
database.py
import mysql.connector
#Définissez la destination de la connexion et connectez-vous
def get_data():
#Exécuter l'ordre
#Réparer
def close_db()
connection.commit()
connection.close()
Recommended Posts