L'automatisation des processus backend dans votre instance SQL Server est une tâche courante. Qu'il s'agisse d'actualiser les statistiques, de reconstruire des index, de lire ou de supprimer des données, il est extrêmement utile d'intégrer d'autres cadres de programmation à votre SGBDR. Cet article examinera ces types de tâches spécifiquement intégrées à Python.
Nous ne nous concentrerons pas sur des questions aussi fondamentales que ce qu'est SQL et Python, ou comment et où nous les utilisons. Au lieu de cela, nous allons examiner les cas spécifiques qui nécessitent de combiner SQL et Python, et divers modules de méthode disponibles pour le faire.
Chaîne de connexion SQL Server
Avant de commencer à explorer le cas de la connexion Python au serveur SQL, familiarisons-nous avec les bases.
Une chaîne de connexion représente les éléments de données requis qui pointent vers et authentifient votre instance de base de données. Il peut y avoir de légères nuances pour chaque type d'instance de base de données, mais en général, les informations requises sont le nom du serveur, le pilote de la base de données, le nom d'utilisateur, le mot de passe et le numéro de port.
Détails de l'instance SQL Server
Les détails de cette chaîne de connexion seront les mêmes que lorsque vous vous connectez via SSMS à l'instance de base de données. Prenez note de l'instance de base de données {SERVER}\{INSTANCE} format - le voici DESKTOP-6L1B155\FogelDev . Il est également possible de se connecter à un nom de serveur si vous n'avez qu'une seule instance par défaut en cours d'exécution.
Code de création de base de données et de table SQL Server
Tout d'abord, nous avons besoin d'une base de données avec une structure de table requise pour fonctionner avec Python et SQL Server. Le script suivant créera une telle base de données et une seule table dans celle-ci. Cette table nous servira de zone de démonstration pour voir comment utiliser SQL et Python ensemble.
CREATE DATABASE CODESIGHT_DEMOS;
USE CODESIGHT_DEMOS;
CREATE TABLE POSTS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
NAME VARCHAR(200),
Author VARCHAR(100),
URL VARCHAR(100),
DATE DATE
)
INSERT INTO POSTS
VALUES('Properly Dealing with Encryption of Databases in an AlwaysOn Availability Group Scenario','Alejandro Cobar','https://codingsight.com/encryption-of-databases-in-alwayson-availability-group-scenario/','4/23/2021')
INSERT INTO POSTS
VALUES('An Overview of DataFrames in Python','Aveek Das','https://codingsight.com/an-overview-of-dataframes-in-python/','4/23/2021')
INSERT INTO POSTS
VALUES('SQL Server Business Intelligence (BI) – Traditional Tools and Technologies','Haroon Ashraf','https://codingsight.com/sql-server-business-intelligence-bi-tools-and-technologies/','4/19/2021')
Modules Python
Notre objectif est maintenant de définir comment connecter Python aux instances de serveur SQL. Plusieurs modules Python sont disponibles pour effectuer cette tâche, et deux d'entre eux sont principaux. Nous allons traiter avec PYODC et SQLAlchemy . Ces modules gèrent la partie connexion des opérations.
Un code supplémentaire est requis pour lire les données des tables SQL Server dans la mémoire. C'est là que les Pandas la bibliothèque arrive.
Pandas peut être étroitement intégré à SQLALchemy pour lire les données directement dans leDataFrame objets (dans un stockage basé sur une matrice de mémoire qui peut fonctionner à une vitesse fulgurante et ressembler à des tables de base de données).
Examinons quelques exemples de chaînes de connexion.
Le premier exemple utilise le serveur SQL et l'instance de la capture d'écran précédente. Vous pouvez définir ces variables dans vos détails spécifiques pour instancier la connexion.
Notez également que cette connexion particulière utilise l'authentification Windows. Par conséquent, il tentera de s'authentifier en tant qu'utilisateur de ma machine Windows à laquelle je suis connecté. Si aucun nom d'utilisateur et mot de passe ne sont spécifiés, il s'agit du comportement par défaut dans la chaîne de connexion.
- Nom de serveur =‘BUREAU-6L1B155’
- Nom de l'instance ='FogelDev'
- Nom de la base de données ='CODESIGHT_DEMOS'
- Numéro de port ='1433'
print("mssql+pyodbc://@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))
Nous pouvons tester si cette connexion fonctionne correctement en exécutant une requête avec Pandas. Il doit lire une requête à partir de la chaîne de connexion en utilisant read_sql_query commande.
df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df
Authentification SQL Server
Que faire si vous devez utiliser la chaîne de connexion basée sur l'authentification du serveur SQL pour vous connecter à votre serveur SQL ? Nous pouvons ajuster notre code Python pour ajouter un nom d'utilisateur et un mot de passe à SQLALchemy moteur.
- Nom de serveur ='DESKTOP-6L1B155'
- Nom de l'instance ='FogelDev'
- Nom de la base de données ='CODESIGHT_DEMOS'
- Numéro de port ='1433'
- Nom d'utilisateur ='CodingSightUser'
- Mot de passe ='Mot de passe123'
print("mssql+pyodbc://{USER}:{PASS}@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://{USER}:{PASS}@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
Encore une fois, nous testons notre connexion, mais cette fois, nous sélectionnons 1 enregistrement dans la table uniquement.
df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df
Écrire des données
Enfin, jetez un œil à l'intégration des données Python dans notre table de base de données SQL Server. Nous créons un objet Dataframe et l'ajoutons au tableau.
La méthode Dataframe :
newdata = [{'Name': 'How to Create the Date Table in Power BI', 'Author': 'Haroon Ashraf', 'URL':'https://codingsight.com/how-to-create-date-table-in-power-bi/', 'Date':'4/21/21'}]
load_df = pd.DataFrame(newdata)
load_df.to_sql("POSTS", MSSQLengine, if_exists='append',index = False, chunksize = 200)
Une autre méthode consisterait à insérer les données directement dans la table avec la commande d'exécution.
La méthode Exécuter :
MSSQLengine.execute("INSERT INTO [POSTS] VALUES('SQL Query Optimization: 5 Core Facts to Boost Queries','Edwin Sanchez','https://codingsight.com/sql-query-optimization-5-core-facts-to-boost-queries/','3/31/21')");
Une fois terminé, le tableau final se présente comme suit. Il a les 3 premières lignes chargées par le script de création initial de SQL Server, et les 4 et 5 lignes sont chargées par Python.
Résumé
Ce message a mis en évidence les paramètres de chaîne de connexion pour connecter le code Python à SQL Server. Nous avons examiné la lecture des données à partir de SQL Server et vérifié deux méthodes d'authentification différentes - le cas spécifique de Python se connecte à l'authentification Windows du serveur SQL et l'authentification standard du serveur SQL. Nous avons également passé en revue les méthodes de chargement des données, dont l'une implique l'utilisation de l'objet DataFrame en Python, et une autre est une commande SQL INSERT brute.