Connecter la base de données MySQL dans Flask
Nous allons apprendre, avec cette explication, comment connecter une base de données MySQL dans Flask à l’aide de flask_mysqldb
. Nous apprendrons également à créer une base de données en ligne.
Connectez la base de données MySQL dans Flask à l’aide de flask_mysqldb
Parfois, les utilisateurs veulent écrire des requêtes directement en SQL au lieu d’utiliser quelque chose comme sql-alchemy
, donc quelle que soit la raison, vous avez la possibilité d’écrire les requêtes en SQL. Dans Flask, mysqldb
vous permet de le faire.
Nous allons maintenant créer une base de données MySQL gratuite sur le service appelé freemysqlhosting.net
. Vous pouvez visiter le site Web en utilisant ce lien.
Après avoir créé votre compte, vous obtiendrez un écran comme indiqué ci-dessous, et lorsque vous créez une base de données, vous recevrez un e-mail avec les informations de votre base de données dans les 15 minutes.
Nous allons maintenant utiliser cette base de données pour obtenir des informations dans notre application Flask. La première chose que nous allons faire est d’installer un module appelé Flask-MySQLdb
.
pip install Flask-MySQLdb
Nous devrons maintenant importer les bibliothèques requises :
from flask import Flask
from flask_mysqldb import MySQL
Nous allons maintenant créer une instance d’application et instancier cette application à l’aide de la classe MySQL(app)
. Vous pouvez également utiliser le code suivant pour spécifier votre application Flask si vous travaillez avec plusieurs applications Flask :
mysql = MySQL()
mysql.init_app(app)
Mais nous avons tout dans un seul fichier, nous n’avons donc pas besoin de le faire. Et puisque nous travaillons avec une base de données, nous devrons mettre en place la configuration.
Tout d’abord, nous devrons définir le MYSQL_USER
, puis nous aurons besoin du MYSQL_PASSWORD
. Nous devons également définir MYSQL_HOST
où se trouve la base de données ; cela peut être sur votre machine locale ou un service séparé comme nous l’avons déjà mis en place ou n’importe où ailleurs.
Nous avons également la base de données elle-même, nous devons donc définir le nom de la base de données. Nous mettrons une configuration supplémentaire qui n’est pas nécessairement nécessaire, ce qui est utile pour obtenir les données renvoyées.
Cela ne prend que des tuples, mais les dictionnaires sont un peu plus faciles à utiliser lorsqu’il s’agit de bases de données car les colonnes peuvent être une clé, et la valeur de ces clés sera la valeur d’une colonne particulière. Si on n’ajoute rien, il prend le tuple par défaut.
app.config["MYSQL_USER"] = "user_name"
app.config["MYSQL_PASSWORD"] = "user_password"
app.config["MYSQL_HOST"] = "sql3.example.net"
app.config["MYSQL_DB"] = "Database_name"
app.config["MYSQL_CURSORCLASS"] = "DictCursor"
mysql = MySQL(app)
Vous pouvez mettre le port, mais la base de données MySQL, par défaut, utilise 3306, nous n’avons donc pas besoin de mettre à jour quoi que ce soit. Maintenant, nous voulons interagir avec la base de données, nous allons donc créer la route et créer une fonction appelée CONNECT_DB()
, et pour interagir avec la base de données, nous devons utiliser un curseur.
Le curseur nous permettra d’exécuter des instructions pour obtenir les résultats de ces instructions. Nous allons créer une variable appelée CS
et l’instancier à l’aide de mysql.connection.cursor()
, et nous allons également créer une table et l’appeler TABLE_NAME
, et nous définirons quelques colonnes.
@app.route("/")
def CONNECT_DB():
CS = mysql.connection.cursor()
CS.execute("""CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))""")
Nous avons déjà créé le tableau et allons insérer des données dans le tableau. Ensuite, nous devons nous engager après avoir inséré des données ou mis à jour ou supprimé.
Nous renverrons également une chaîne lorsque les données seront insérées dans la base de données.
CS.execute("""INSERT INTO TABLE_NAME VALUES (1, 'Harry')""")
CS.execute("""INSERT INTO TABLE_NAME VALUES (2, 'Arthor')""")
mysql.connection.commit()
return "Executed successfully"
Allons-y et exécutons le serveur et voyons si la chaîne est renvoyée sur le navigateur. Assurez-vous que votre connexion Internet est connectée.
Nous devrons vérifier que les données sont insérées dans la base de données. Maintenant va faire une requête pour sélectionner la table.
Puisque nous allons récupérer plusieurs lignes, nous pouvons utiliser fetchall()
. Nous mettrons toutes nos informations dans la variable Executed_DATA
.
Nous allons l’imprimer sur la console et afficher la valeur renvoyée :
CS.execute("""SELECT * FROM TABLE_NAME""")
Executed_DATA = CS.fetchall()
print(Executed_DATA)
return str(Executed_DATA[1]["name"])
Enregistrons et actualisons la page. Nous pouvons voir la valeur affichée, et si nous regardons ici dans la console, nous pouvons voir un tuple avec deux éléments.
Code Python complet :
from flask import Flask
from flask_mysqldb import MySQL
app = Flask(__name__)
app.config["MYSQL_USER"] = "user_name"
app.config["MYSQL_PASSWORD"] = "user_password"
app.config["MYSQL_HOST"] = "sql3.example.net"
app.config["MYSQL_DB"] = "Database_name"
app.config["MYSQL_CURSORCLASS"] = "DictCursor"
mysql = MySQL(app)
# mysql.init_app(app)
@app.route("/")
def CONNECT_DB():
CS = mysql.connection.cursor()
# CS.execute('''CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))''')
# CS.execute('''INSERT INTO TABLE_NAME VALUES (1, 'Harry')''')
# CS.execute('''INSERT INTO TABLE_NAME VALUES (2, 'Arthor')''')
# mysql.connection.commit()
# return 'Executed successfully'
CS.execute("""SELECT * FROM TABLE_NAME""")
Executed_DATA = CS.fetchall()
print(Executed_DATA)
return str(Executed_DATA[1]["name"])
if __name__ == "__main__":
app.run(debug=True)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn