Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak połączyć Python z SQL Server, aby zautomatyzować proces backendu?

Automatyzacja procesów backendowych w Twojej instancji SQL Server to typowe zadanie. Niezależnie od tego, czy jest to odświeżanie statystyk, przebudowywanie indeksów, odczytywanie czy usuwanie danych, integracja innych struktur programistycznych z systemem RDBMS jest niezwykle cenna. W tym artykule omówimy te typy zadań, które są specjalnie zintegrowane z Pythonem.

Nie będziemy skupiać się na tak fundamentalnych pytaniach jak:czym jest SQL i Python, jak i gdzie ich używamy. Zamiast tego zbadamy konkretne przypadki, które wymagają połączenia SQL i Pythona oraz różnych dostępnych modułów metod.

Ciąg połączenia serwera SQL

Zanim zaczniemy badać przypadek połączenia Pythona z serwerem SQL, zapoznajmy się z podstawami.

Parametry połączenia reprezentują wymagane fragmenty danych, które wskazują i uwierzytelniają wystąpienie bazy danych. Mogą istnieć drobne niuanse dla każdego typu instancji bazy danych, ale ogólnie wymagane informacje to nazwa serwera, sterownik bazy danych, nazwa użytkownika, hasło i numer portu.

Szczegóły instancji serwera SQL

Szczegóły tych parametrów połączenia będą takie same, jak w przypadku łączenia się przez SSMS z instancją bazy danych. Zanotuj instancję bazy danych {SERVER}\{INSTANCE} format – tutaj jest DESKTOP-6L1B155\FogelDev . Możliwe jest również połączenie z nazwą serwera, jeśli masz uruchomioną tylko jedną domyślną instancję.

Kod tworzenia bazy danych i tabel SQL Server

Po pierwsze, potrzebujemy bazy danych o strukturze tabeli wymaganej do pracy z Pythonem i SQL Server. Poniższy skrypt utworzy taką bazę danych i jedną w niej tabelę. Ta tabela posłuży nam jako obszar demonstracyjny, aby zobaczyć, jak używać razem SQL i Pythona.

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')

Moduły Pythona

Naszym celem jest teraz zdefiniowanie sposobu połączenia Pythona z instancjami serwera SQL. Do wykonania tego zadania dostępnych jest wiele modułów Pythona, a dwa z nich są podstawowe. Zamierzamy zająć się PYODC i SQLAlchemy . Te moduły obsługują część operacji związanych z połączeniem.

Do wczytania danych z tabel SQL Server do pamięci wymagany jest dodatkowy kod. To tutaj Pandy wchodzi biblioteka.

Pandy może być ściśle zintegrowany z SQLALchemy aby wczytać dane bezpośrednio do DataFrame obiekty (w pamięci masowej opartej na tablicy pamięci, która może działać błyskawicznie i wyglądać jak tabele bazy danych).

Rzućmy okiem na kilka przykładów parametrów połączenia.

Pierwszy przykład wykorzystuje SQL Server i instancję z poprzedniego zrzutu ekranu. Możesz ustawić te zmienne w swoich konkretnych danych, aby nawiązać połączenie.

Należy również zauważyć, że to konkretne połączenie korzysta z uwierzytelniania systemu Windows. Dlatego spróbuje uwierzytelnić się jako użytkownik z mojego komputera z systemem Windows, na którym jestem zalogowany. Jeśli nie określono nazwy użytkownika i hasła, jest to domyślne zachowanie w ciągu połączenia.

  • Nazwa serwera =„DESKTOP-6L1B155”
  • Nazwa instancji =„FogelDev”
  • Nazwa bazy danych =„CODESIGHT_DEMOS”
  • Numer 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))

Możemy sprawdzić, czy to połączenie działa poprawnie, wykonując zapytanie za pomocą Pand. Musi odczytać zapytanie z ciągu połączenia za pomocą read_sql_query polecenie.

df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df

Uwierzytelnianie serwera SQL

Co zrobić, jeśli musisz użyć ciągu połączenia opartego na uwierzytelnianiu serwera SQL, aby połączyć się z serwerem SQL? Możemy dostosować nasz kod Pythona, aby dodać nazwę użytkownika i hasło do SQLALchemy silnik.

  • Nazwa serwera =„DESKTOP-6L1B155”
  • Nazwa instancji =„FogelDev”
  • Nazwa bazy danych =„CODESIGHT_DEMOS”
  • Numer portu =„1433”
  • Nazwa użytkownika =„KodowanieSightUser”
  • Hasło =„Hasło123”
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))

Ponownie testujemy nasze połączenie, ale tym razem wybieramy tylko 1 rekord z tabeli.

df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df

Zapisywanie danych

Na koniec spójrz na pobieranie danych Pythona do naszej tabeli bazy danych SQL Server. Tworzymy obiekt Dataframe i dołączamy go do tabeli.

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)

Inną metodą byłoby wstawienie danych bezpośrednio do tabeli za pomocą polecenia wykonania.

Metoda wykonania:

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')");

Po zakończeniu stół finałowy wygląda następująco. Ma pierwsze 3 wiersze ładowane przez początkowy skrypt tworzenia SQL Server, a 4 i 5 wierszy są ładowane przez Python.

Podsumowanie

W tym poście wyróżniono parametry ciągu połączenia służące do łączenia kodu Pythona z SQL Server. Zbadaliśmy odczytywanie danych z SQL Server i sprawdziliśmy dwie różne metody uwierzytelniania – konkretny przypadek połączenia Pythona z SQL Server uwierzytelnianie Windows oraz standardowe uwierzytelnianie SQL Server. Przejrzeliśmy również metody ładowania danych, z których jedna polega na użyciu obiektu DataFrame w Pythonie, a druga to surowe polecenie SQL INSERT.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATEDIFF() Przykłady w SQL Server

  2. Łatwe przywracanie bazy danych SQL — przewodnik krok po kroku

  3. Uzyskaj listę tabel z lub bez ograniczenia klucza podstawowego we wszystkich bazach danych z wystąpienia programu SQL Server — samouczek SQL Server / TSQL, część 61

  4. Zapytanie SQL, aby uzyskać zagregowany wynik w separatorach przecinków wraz z grupowaniem po kolumnie w SQL Server

  5. Konwertuj „datetime” na „time” w SQL Server (przykłady T-SQL)