Automatizace backendových procesů ve vaší instanci SQL Server je běžným úkolem. Ať už se jedná o aktualizaci statistik, přestavbu indexů, čtení nebo mazání dat, je nesmírně cenné integrovat další programovací rámce s vaším RDBMS. Tento článek se bude zabývat těmito typy úloh specificky integrovanými s Pythonem.
Nebudeme se zaměřovat na takové základní otázky, jako je to, co je SQL a Python, nebo jak a kde je používáme. Místo toho se podíváme na konkrétní případy, které vyžadují kombinaci SQL a Pythonu, a různé moduly metod, které jsou k tomu k dispozici.
Připojovací řetězec SQL Server
Než začneme zkoumat případ připojení Pythonu k SQL serveru, seznamme se se základy.
Připojovací řetězec představuje požadované části dat, které ukazují a ověřují vaši instanci databáze. U každého typu instance databáze mohou existovat drobné nuance, ale obecně by požadované informace byly název serveru, ovladač databáze, uživatelské jméno, heslo a číslo portu.
Podrobnosti instance SQL Server
Podrobnosti tohoto připojovacího řetězce budou stejné jako při připojení přes SSMS k instanci databáze. Poznamenejte si instanci databáze {SERVER}\{INSTANCE} formát – zde je DESKTOP-6L1B155\FogelDev . Je také možné připojit se k názvu serveru, pokud máte spuštěnou pouze jednu výchozí instanci.
Databáze serveru SQL a vytvoření tabulky
Nejprve potřebujeme databázi s tabulkovou strukturou potřebnou pro práci s Pythonem a SQL Serverem. Následující skript vytvoří takovou databázi a v ní jedinou tabulku. Tato tabulka nám poslouží jako demonstrační oblast, abychom viděli, jak používat SQL a Python společně.
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')
Moduly Pythonu
Naším cílem je nyní definovat, jak připojit Python k instancím SQL serveru. K provedení tohoto úkolu je k dispozici několik modulů Pythonu a dva z nich jsou primární. Budeme se zabývat PYODC a SQLAlchemy . Tyto moduly zajišťují připojovací část operací.
Ke čtení dat z tabulek SQL Server do paměti je vyžadován další kód. To je místo, kde Pandy přichází knihovna.
Pandy lze úzce integrovat s SQLALchemy k načtení dat přímo doDatového rámce objektů (v úložišti založeném na paměťovém poli, které může pracovat rychlostí blesku a vypadat jako databázové tabulky).
Podívejme se na několik příkladů připojovacích řetězců.
První příklad používá SQL Server a instanci z předchozího snímku obrazovky. Tyto proměnné můžete nastavit do svých konkrétních podrobností a vytvořit instanci připojení.
Všimněte si také, že toto konkrétní připojení používá ověřování systému Windows. Proto se pokusí ověřit jako uživatel z mého počítače se systémem Windows, ke kterému jsem přihlášen. Pokud není zadáno žádné uživatelské jméno a heslo, jedná se o výchozí chování v připojovacím řetězci.
- Název serveru =‚DESKTOP-6L1B155‘
- Název instance =‘FogelDev’
- Název databáze =‚CODESIGHT_DEMOS‘
- Číslo portu =„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))
Můžeme otestovat, zda toto připojení funguje správně, provedením dotazu s Pandas. Musí přečíst dotaz z připojovacího řetězce pomocí read_sql_query příkaz.
df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df
Ověření serveru SQL
Co když potřebujete k připojení k serveru SQL použít připojovací řetězec založený na ověřování serveru SQL? Můžeme upravit náš kód Python tak, aby přidal uživatelské jméno a heslo do SQLALchemy motor.
- Název serveru =‚DESKTOP-6L1B155‘
- Instancename =‘FogelDev’
- Název databáze =‚CODESIGHT_DEMOS‘
- Číslo portu =„1433“
- Uživatelské jméno =‘CodingSightUser’
- Heslo =‘Password123’
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))
Opět testujeme naše připojení, ale tentokrát vybíráme pouze 1 záznam z tabulky.
df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df
Zápis dat
Nakonec se podívejte na získávání dat Pythonu do naší databázové tabulky SQL Server. Vytvoříme objekt Dataframe a připojíme jej k tabulce.
Metoda 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)
Další metodou by bylo vložení dat přímo do tabulky pomocí příkazu execute.
Metoda Execute:
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')");
Když je hotovo, výsledná tabulka vypadá následovně. Má první 3 řádky načtené počátečním skriptem pro vytvoření SQL Serveru a 4 a 5 řádků načítá Python.
Shrnutí
Tento příspěvek zdůraznil parametry připojovacího řetězce pro připojení kódu Pythonu se serverem SQL. Prozkoumali jsme načítání dat z SQL Serveru a zkontrolovali dvě různé autentizační metody – specifický případ autentizace Python connect to SQL Server Windows a standardní autentizaci SQL serveru. Také jsme prozkoumali metody načítání dat, z nichž jedna zahrnuje použití objektu DataFrame v Pythonu a další je nezpracovaný příkaz SQL INSERT.