sql >> Databáze >  >> RDS >> Sqlserver

Jak připojit Python k serveru SQL pro automatizaci backendového procesu

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.


  1. Je možné vynutit zamykání na úrovni řádků v SQL Server?

  2. PostgreSQL:mezi datem a časem

  3. SQL vyberte max(datum) a odpovídající hodnotu

  4. Azure Virtual Machines pro použití SQL Server