Dans le domaine de la connectivité des bases de données, le maintien d'une connexion persistante est crucial pour un accès ininterrompu aux données. MySQLdb, une bibliothèque Python populaire pour l'interface avec les bases de données MySQL, fournit un moyen de reconnecter automatiquement les clients en cas d'échec de connexion.
Activation de la reconnexion automatique dans les versions précédentes
Dans les versions antérieures de MySQLdb, la fonctionnalité de reconnexion automatique pouvait être activée via la fonction mysql_options(), comme indiqué ci-dessous :
my_bool reconnect = 1 mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect)
Cependant, avec l'avènement de MySQL Connector/Python, l'implémentation sous-jacente a changé et cette approche n'est plus applicable.
Solution pour MySQL Connector/Python
Pour réaliser la reconnexion automatique dans MySQL Connector/Python, il est nécessaire de personnaliser le comportement de l'objet Cursor. L'extrait de code suivant illustre cette approche :
import MySQLdb class DB: conn = None def connect(self): self.conn = MySQLdb.connect() def query(self, sql): try: cursor = self.conn.cursor() cursor.execute(sql) except (AttributeError, MySQLdb.OperationalError): self.connect() cursor = self.conn.cursor() cursor.execute(sql) return cursor db = DB() sql = "SELECT * FROM foo" cur = db.query(sql) # wait a long time for the Mysql connection to timeout cur = db.query(sql) # still works
Explication
Ce code définit une méthode query() personnalisée qui encapsule la méthode Cursor.execute(). Si une erreur de connexion se produit (soit une AttributeError, soit une MySQLdb.OperationalError), la méthode query() tentera de se reconnecter à la base de données puis réexécutera la requête.
En implémentant ce mécanisme de reconnexion automatique dans le Objet Curseur, vous pouvez vous assurer que vos scripts Python peuvent continuer à fonctionner même si la connexion MySQL est perdue par intermittence. Cette approche fournit un moyen plus robuste et fiable de maintenir la connectivité de la base de données.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3