Étape 3 : Preuve de concept pour se connecter à SQL à l’aide de pyodbc
Cet exemple de preuve de concept utilise pyodbc
pour se connecter à une base de données SQL. Dans cet exemple, on suppose que vous utilisez l’exemple de base de données AdventureWorksLT.
Remarque
Cet exemple doit être considéré uniquement comme une preuve de concept. L’exemple de code est simplifié par souci de clarté et ne représente pas nécessairement les meilleures pratiques recommandées par Microsoft.
Conditions préalables
- Python 3
- Si vous n’avez pas encore Python, installez le runtime Python et le gestionnaire de package Python Package Index (PyPI) à partir de python.org.
- Si vous préférez ne pas utiliser votre propre environnement, ouvrez en tant que devcontainer à l’aide de GitHub Codespaces.
- Package
pyodbc
à partir de PyPI. - Installation de Microsoft ODBC Driver 18 pour SQL Server
- Une base de données SQL et des informations d’identification.
Connecter et interroger des données
Connectez-vous à une base de données à l’aide de vos informations d’identification.
Créez un fichier nommé app.py.
Ajoutez une description docstring du module.
""" Connects to a SQL database using pyodbc """
Importez le package
pyodbc
.import pyodbc
Créez des variables pour vos identifiants de connexion.
SERVER = '<server-address>' DATABASE = '<database-name>' USERNAME = '<username>' PASSWORD = '<password>'
Créez une variable de chaîne de connexion à l’aide de l’interpolation de chaîne.
connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'
Utilisez la
pyodbc.connect
fonction pour vous connecter à une base de données SQL.conn = pyodbc.connect(connectionString)
Exécuter une requête
Utilisez une chaîne de requête SQL pour exécuter une requête et analyser les résultats.
Créez une variable pour la chaîne de requête SQL.
SQL_QUERY = """ SELECT TOP 5 c.CustomerID, c.CompanyName, COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC; """
Utilisez
cursor.execute
pour récupérer un jeu de résultats à partir d’une requête sur la base de données.cursor = conn.cursor() cursor.execute(SQL_QUERY)
Remarque
Cette fonction accepte n’importe quelle requête et renvoie un jeu de résultats qui peut être itéré à l’aide de cursor.fetchone().
Utilisez
cursor.fetchall
avec une boucleforeach
pour obtenir tous les enregistrements de la base de données. Ensuite, imprimez les enregistrements.records = cursor.fetchall() for r in records: print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
Enregistrez le fichier app.py.
Ouvrez un terminal et testez l’application.
python app.py
29485 1 Professional Sales and Service 29531 1 Remarkable Bike Store 29546 1 Bulk Discount Store 29568 1 Coalition Bike Company 29584 1 Futuristic Bikes
Insérer une ligne en tant que transaction
Dans cet exemple, vous allez exécuter une instruction INSERT
en toute sécurité et passer des paramètres. Le passage de paramètres en tant que valeurs protège votre application contre les attaques par injection de code SQL.
Importez
randrange
à partir de la bibliothèquerandom
.from random import randrange
Générez un numéro de produit aléatoire.
productNumber = randrange(1000)
Conseil
Générer un numéro de produit aléatoire ici vous garantit de pouvoir exécuter cet exemple plusieurs fois.
Créez une chaîne d’instruction SQL.
SQL_STATEMENT = """ INSERT SalesLT.Product ( Name, ProductNumber, StandardCost, ListPrice, SellStartDate ) OUTPUT INSERTED.ProductID VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP) """
Exécutez l’instruction à l’aide de
cursor.execute
.cursor.execute( SQL_STATEMENT, f'Example Product {productNumber}', f'EXAMPLE-{productNumber}', 100, 200 )
Récupérez la première colonne du résultat unique à l’aide de
cursor.fetchval
, imprimez l’identificateur unique du résultat, puis validez l’opération en tant que transaction à l’aide deconnection.commit
.resultId = cursor.fetchval() print(f"Inserted Product ID : {resultId}") conn.commit()
Conseil
Éventuellement, vous pouvez utiliser
connection.rollback
pour restaurer la transaction.Fermez le curseur et la connexion à l’aide de
cursor.close
etconnection.close
.cursor.close() conn.close()
Enregistrez le fichier app.py et testez à nouveau l’application
python app.py
Inserted Product ID : 1001