Database
 sql >> Baza danych >  >> RDS >> Database

Programowanie baz danych w Pythonie z SQL Express dla początkujących

Popularność Pythona gwałtownie wzrosła w ciągu ostatnich 5 lat. Wielu nowych programistów przyciąga go ze względu na łagodną krzywą uczenia się w stosunku do innych języków programowania. Doświadczonych programistów ciągnie do niego ze względu na jego rozszerzalność i moc. Jednak jednym z głównych czynników napędzających tę masową adopcję jest łatwość, z jaką Python może współpracować z bazami danych. Ten samouczek programowania w Pythonie pokaże, jak zacząć używać Pythona do komunikacji z SQL Express za pomocą Pythona 3.

Programowanie w Pythonie i bazach danych

Początkujący Python, który chce zintegrować funkcjonalność bazy danych z dowolnym projekt oprogramowania napisany w dowolnym język musi mieć podstawową wiedzę na temat co najmniej dwóch Języki. Pierwszym jest oczywiście Python, a drugim specyficzny język zapytań strukturalnych (SQL) używany przez bazę danych. Chociaż SQL jest ustandaryzowany, w praktyce nie jest językiem uniwersalnym, ale implementacje między różnymi bazami danych są na tyle bliskie, że przechodzenie z jednej bazy danych do drugiej nie jest dużym wyzwaniem, gdy ma się komfortowy poziom doświadczenia w tworzeniu aplikacji bazodanowych.

Inną ważną kwestią dotyczącą baz danych jest to, że wszystkie wymagają oprogramowania do zarządzania. Te narzędzia do zarządzania mogą pomóc w skonfigurowaniu dostępu do bazy danych i uprawnień bezpieczeństwa w obrębie bazy danych. Mogą być również używane do debugowania aplikacji bazodanowych, ponieważ umożliwiają programiście wykonywanie takich czynności jak:

  • Tworzenie i zarządzanie zawartością tabel, widoków i innych obiektów bazy danych. Obejmuje to relacje między tabelami, a także konfigurację reguł integralności.
  • Interakcja z bazą danych bezpośrednio poprzez wpisanie kodu SQL.
  • Debugowanie składni SQL.
  • Cofanie (do pewnego stopnia) szkód spowodowanych przez niepoprawnie zakodowane instrukcje SQL w aplikacji.

Nawet jeśli programista zdecyduje się na użycie bazy danych opartej na noSQL, takiej jak MongoDB, nadal będą wyzwaniami związanymi z nauką składni kodowania specyficznej dla bazy danych, potrzebnej do działania takiego rozwiązania. Oczywiście nie są to czynniki odstraszające, to tylko czynniki techniczne, które należy wziąć pod uwagę przy każdym projekcie rozwoju oprogramowania.

Sterowniki Pythona i baz danych

Python, jak każdy inny język programowania, nie może natywnie komunikować się z daną bazą danych. Wymaga dodania dodatkowych modułów dla konkretnego serwera bazy danych. Z punktu widzenia najlepszych praktyk najlepiej jest użyć modułu sterownika bazy danych, który jest specyficzny dla serwera bazy danych wybranego dla projektu oprogramowania. Dzięki temu Python może uzyskać dostęp do wszystkich funkcji serwera bazy danych, nawet jeśli wiąże się to z dodatkowym kosztem korzystania z określonej składni programowania modułu. Chociaż podjęto pewne próby stworzenia „uniwersalnych” modułów sterowników baz danych, które mogą łączyć się z wieloma serwerami baz danych, często odbywa się to kosztem utraty dostępu do niektórych funkcji konkretnego serwera bazy danych.

Co to jest SQL Express?

SQL Server od dziesięcioleci jest popularnym rozwiązaniem serwera baz danych dla systemu Windows. Chociaż jest to tak dalekie od darmowego rozwiązania serwerowego bazy danych, jak to tylko możliwe, Microsoft zapewnia zero-kosztowy, uproszczony wariant SQL Server o nazwie SQL Express. SQL Express to idealne narzędzie do nauki dla początkujących, ponieważ obsługuje tę samą składnię SQL, której używa SQL Server. Zarówno SQL Express, jak i SQL Server używają niestandardowego rozszerzenia SQL o nazwie „Transact-SQL”, znanego również jako „T-SQL”. Zarówno SQL Express, jak i SQL Server obsługują korzystanie z kont użytkowników Windows oraz tradycyjnych systemów nazw użytkowników i haseł do zarządzania dostępem.

Python komunikuje się z SQL Express lub SQL Server za pomocą modułu o nazwie PyODBC . Zarówno SQL Server, jak i SQL Express są zarządzane przez oddzielną, bezkosztową aplikację Windows o nazwie „SQL Server Management System”, popularnie znaną jako „SSMS”. W chwili pisania tego tekstu zarówno SQL Express, jak i SSMS są oddzielnymi plikami do pobrania od Microsoft:

  • Pobieranie SSMS
  • Pobieranie SQL Express

Jak skonfigurować SQL Express do programowania w Pythonie

SQL Express, podobnie jak SQL Server, obsługuje dwa rodzaje uwierzytelniania. Pierwszym z nich jest uwierzytelnianie na podstawie konta użytkownika systemu Windows, znanego również jako "Zaufane połączenie". Drugi to tradycyjne uwierzytelnianie oparte na nazwie użytkownika i haśle, które jest zaimplementowane w tzw. „Uwierzytelnianiu w trybie mieszanym”. Uwierzytelnianie w trybie mieszanym obsługuje zarówno uwierzytelnianie oparte na koncie użytkownika systemu Windows, jak i uwierzytelnianie oparte na nazwie użytkownika i haśle. Nie ma możliwości samodzielnej obsługi uwierzytelniania opartego na nazwie użytkownika i haśle w SQL Server lub SQL Express.

Firma Microsoft odchodzi od uwierzytelniania w trybie mieszanym, ponieważ jedną z głównych zalet korzystania z zaufanych połączeń jest to, że poświadczenia bazy danych nie muszą być przechowywane w kodzie aplikacji. Demonstracja w tym artykule również go nie użyje.

NIE kopiowanie parametrów połączenia po instalacji

Jednym z punktów spornych dla początkujących deweloperów aplikacji jest początkowe zamieszanie związane z ciągami połączeń SQL Server. W przypadku instalowania SQL Express program instalacyjny udostępnia parametry połączenia dla utworzonej po instalacji instancji SQL Express. Niestety, podany ciąg połączenia prawdopodobnie nie będzie działał z PyODBC . Chociaż kuszące jest, aby „ukołysać” się poczuciem bezpieczeństwa z tym „darmowym”, spowoduje to więcej kłopotów, niż jest to warte.

Rysunek 1 – Pobieranie ciągu połączenia z instalatora SQL Express

Zwróć uwagę, że w momencie pisania tego tekstu program instalacyjny SQL Express zawiera również łącze do pobrania programu instalacyjnego SSMS.

Jak utworzyć bazę danych w SQL Express

Po zainstalowaniu zarówno SQL Express, jak i SSMS, nadszedł czas na stworzenie podstawowej bazy danych z odpowiednimi ograniczeniami dostępu. Najłatwiejszym sposobem na uruchomienie SSMS jest kliknięcie przycisku Start w systemie Windows, wpisz „ssms” w pasku wyszukiwania, poczekaj, aż w prawym górnym rogu pojawi się „Microsoft SQL Server Management Studio 18”, a następnie kliknij przycisk Otwórz link po prawej stronie panelu menu Start:

Rysunek 2 – Uruchamianie programu SSMS

Po uruchomieniu programu SSMS wita się następujące okno dialogowe:

Rysunek 3 – Okno dialogowe otwierania SSMS

W przypadku uwierzytelniania systemu Windows nie ma potrzeby wprowadzania żadnych poświadczeń. Konto użytkownika Windows pod którym zainstalowano SQL Express ma uprawnienia administracyjne dla instancji SQL Express. Po prostu kliknij Połącz aby kontynuować.

Po lewej stronie okna aplikacji SSMS , pojawi się Eksplorator obiektów . Aby utworzyć nową bazę danych, kliknij prawym przyciskiem myszy Bazy danych i wybierz Utwórz bazę danych z kontekstu menu:

Rysunek 4 – Tworzenie nowej bazy danych – Część 1 z 2

Kliknięcie Nowa baza danych… otworzy nowe okno dialogowe, w którym można wpisać szczegóły nowej bazy danych. Na potrzeby tej demonstracji baza danych będzie nazywać się RazorDemo , jako nieco nawiązanie do poprzedniego artykułu na temat tworzenia aplikacji opartych na Razor w języku C#. Wpisz nazwę bazy danych w polu tekstowym obok Nazwa bazy danych a następnie kliknij przycisk OK na dole okna dialogowego. Zwróć uwagę, że na poniższej ilustracji kolumny Nazwy logicznej plików zostało nieco poszerzone, aby pełne Nazwy logiczne tworzonych plików bazy danych zostało ujawnionych:

Rysunek 5 – Tworzenie nowej bazy danych – Część 2 z 2

Nowa baza danych pojawi się wtedy w Eksploratorze obiektów pod Bazami danych folder:

Rysunek 6 – Nowo utworzona baza danych „RazorDemo”

Jak tworzyć tabele w SQL Express

Relacyjna baza danych nie jest naprawdę przydatna bez tabel do przechowywania danych, a najprostszym sposobem tworzenia tych tabel jest użycie kodu SQL. Uwaga, chociaż można użyć Kreatora tworzenia tabeli aby utworzyć tabelę, użycie kodu SQL jest szybsze, łatwiejsze i znacznie prostsze. Zacznij od kliknięcia prawym przyciskiem myszy RazorDemo wpis bazy danych, a następnie kliknij lewym przyciskiem myszy Nowe zapytanie opcja w oknie kontekstowym:

Ilustracja 7 – Otwieranie nowego okna zapytań

Okno edytora zapytań podobne do poniższego pojawi się po prawej stronie Eksploratora obiektów :

Ilustracja 8 – Okno Edytora zapytań

Kod tworzenia tabeli jest pokazany na poniższej liście:

use RazorDemo;  # See the Important Note below

create table artists
(rcdid int not null identity primary key,
artist_name varchar(max));

create table albums
(rcdid int not null identity primary key,
artist_id int not null references artists(rcdid) on delete cascade,
album_name varchar(max));
         

Listing 1 - Table Creation SQL Code

Uwaga, podczas tworzenia okna edytora zapytań z bazy danych zwykle gwarantuje, że wybrana baza danych będzie tą, na której wykonywany jest kod, dobrym pomysłem jest zawsze jawnie użyć zamierzona baza danych na początku kodu. zastosowanie polecenie jawnie wybiera nazwę bazy danych, która za nim podąża.

Naciśnięcie F5 lub klikając przycisk Wykonaj przycisk wykona instrukcje przeciwko RazorDemo Baza danych. Jeśli wykonanie się powiedzie, w sekcji „Wiadomości . pojawi się komunikat informujący o tym ramka poniżej:

Ilustracja 9 – Udane tworzenie tabeli

Nowo utworzone tabele i ich kolumny można zobaczyć w Eksploratorze obiektów także. Zwróć uwagę, że czasami Odśwież opcja z menu kontekstowego, które pojawia się po kliknięciu prawym przyciskiem myszy bazy danych, może wymagać wybrania w celu wyświetlenia nowych obiektów w bazie danych:

Ilustracja 10 – Odświeżanie Eksploratora obiektów


Rysunek 11 – Nowe tabele i ich kolumny

W tym momencie SSMS można bezpiecznie zamknąć.

Zauważ, że SSMS działa w ten sam sposób z każdą bazą danych SQL Server. Zawsze najlepszą praktyką jest zapisanie całego kodu tworzenia tabeli, niezależnie od używanego serwera bazy danych. Mimo że SQL Server i SQL pozwalają na odzyskanie takich skryptów, oba pozwalają również na użycie szyfrowania w takich instrukcjach, aw takich przypadkach kod nie może zostać odzyskany.

Python i SQL Express

Zwykle potrzebna byłaby tutaj dyskusja na temat bezpieczeństwa SQL Server, ale ponieważ Zaufane połączenia będzie używany, o ile uruchomiony proces wykonujący kod Pythona jest własnością użytkownika Windows który ma już dostęp do bazy danych, do której uzyskuje się dostęp, ta dyskusja nie będzie potrzebna. Należy pamiętać, że zarówno SQL Server, jak i SQL Express oferują bardzo solidne dostosowania związane z bezpieczeństwem, ale wykraczają one poza zakres artykułu przeznaczonego dla początkujących.

Uwaga, nie przemilczaj właściwego bezpieczeństwa bazy danych dla żadnej aplikacji działającej w środowisku produkcyjnym! Upewnij się, że konto użytkownika, które ma dostęp do bazy danych w środowisku projekcyjnym, ma tylko najmniejsze możliwe uprawnienia.

Wersja Pythona użyta w tych przykładach kodu to 3.10 i została zainstalowana za pośrednictwem Microsoft Store w systemie Windows. Zainstalowanie Pythona tą metodą spowoduje dodanie plików wykonywalnych Pythona i PIP3 do ścieżki systemowej, dzięki czemu pełne ścieżki do tych poleceń nie będą musiały być wpisywane w Wierszu polecenia okna. Do wprowadzania kodu dobrym, bezkosztowym edytorem tekstu jest Notepad++.

Otwieranie okien wiersza poleceń

Wykonywanie kodu Pythona najlepiej wykonywać za pomocą Wiersza polecenia . Aby uzyskać dostęp do Wiersza polecenia , kliknij przycisk Rozpocznij w systemie Windows i wpisz cmd w pasku wyszukiwania. Poczekaj na Wiersz polecenia pojawi się, a następnie kliknij przycisk Otwórz link po prawej stronie Menu Start :

Ilustracja 12 – Otwieranie wiersza polecenia

Typowy Wiersz polecenia okno wygląda tak:

Rysunek 13 – Typowy wiersz polecenia

Jak zainstalować PyODBC

PyODBC to moduł Pythona, który umożliwia Pythonowi dostęp zarówno do SQL Server, jak i SQL Express. Po zainstalowaniu Pythona za pośrednictwem Microsoft Store, PyODBC można dodać do Pythona za pomocą polecenia:

pip3 install pyodbc

Rysunek 14 – Pomyślna instalacja PyODBC

Uwaga, jeśli jest zainstalowanych wiele wersji Pythona, na przykład zarówno Python 2, jak i Python 3, może być konieczne dodanie przedrostka pip3 polecenie z pełną ścieżką systemu Windows do polecenia dla odpowiedniej wersji Pythona.

Zauważ też, że jeśli zainstalowany jest tylko Python 3, pip3 polecenie powinno być nadal używane zamiast bardziej ogólnego pip polecenie, ponieważ jest to właściwa konwencja.

Pisanie kodu w Pythonie

Teraz, gdy baza danych jest skonfigurowana i PyODBC są zainstalowane, baza danych może zostać zapełniona. W przypadku bazy danych, która kataloguje artystów i albumy, wystarczy kilka losowo wygenerowanych nazw zespołów i albumów. Dołączony jest również kod Pythona do połączenia z bazą danych, ale wstawki nie są (jeszcze):

# bad-band-name-maker.py
import sys
import random
import pyodbc

part1 = ["The", "Uncooked", "Appealing", "Larger than Life", "Drooping", "Unwell", "Atrocious", "Glossy", "Barrage", "Unlawful"]
part2 = ["Defeated", "Hi-Fi", "Extraterrestrial", "Adumbration", "Limpid", "Looptid", "Cromulent", "Unsettled", "Soot", "Twinkle"]
part3 = ["Brain", "Segment", "Audio", "Legitimate Business", "Mentality", "Sound", "Canticle", "Monsoon", "Preserves", "Hangout"]

part4 = ["Cougar", "Lion", "Lynx", "Ocelot", "Puma", "Jaguar", "Panther"]
part5 = ["Fodder", "Ersatz Goods", "Leftovers", "Infant Formula", "Mush", "Smoothie", "Milkshakes"]


def main(argv):
  # Connect to the RazorDemo database.
  conn = pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=localhost\SQLEXPRESS;Database=RazorDemo;Trusted_Connection=yes;")

  # Generate 15 bad band names:
  for x in range(1, 16):
    rand1 = random.randrange(0, 9)
    rand2 = random.randrange(0, 9)
    rand3 = random.randrange(0, 9)
    badName = part1[rand1] + ' ' + part2[rand2] + ' ' + part3[rand3]
    print ("Band name [" + str(x) + "] is [" + badName + "]")
  
    for y in range(1, 3):
      rand4 = random.randrange(0, len(part4))
      rand5 = random.randrange(0, len(part5))
      albumName = part4[rand4] + " " + part5[rand5]
      print ("\tAlbum [" + albumName + "]")
      
  # Close the Connection
  conn.close()
  return 0

if __name__ == "__main__":
	main(sys.argv[1:])



Listing 2 - Making up some data

Daje to następujący wynik:

Ilustracja 15 – Losowo generowane nazwy pasm

Zwróć uwagę na użycie cd polecenie, aby przejść do katalogu, w którym zapisany jest kod Pythona. PyODBC połącz() funkcja nie powiedzie się, jeśli aktualnie zalogowane konto użytkownika Windows nie jest wymieniony jako mający dostęp w SQL Express. Jest to problem tylko wtedy, gdy baza danych jest tworzona przy użyciu jednego konta użytkownika Windows ale kod jest uruchamiany na innym koncie użytkownika Windows .

Najmniej najgorszy sposób WSTAWIANIA danych w SQL i PyODBC

Wielu początkujących programistów Pythona ma ochotę na wywołanie PyODBC wzywa do WSTAW oświadczenia w kolejnych sekcjach kodu oraz w kontekście tego, co zostanie powiedziane dalej, nie jest to zły pomysł:

Ilustracja 16 – „Prawie” zły sposób pracy z bazą danych

Powód, dla którego używa się wywołań PyODBC wykonać WSTAWKI , Wybrane i inne funkcje związane z bazą danych, takie jak UPDATE lub USUŃ , w pętlach może być złe, ponieważ każde z tych wywołań wiąże się z obciążeniem. W pętli, która może potencjalnie iterować setki, tysiące razy, a nawet więcej, może to skutkować znaczną ilością czasu (minuty lub więcej) na wykonanie skryptu. W przypadku aplikacji internetowych, które korzystają z takiego podejścia, problemy z wydajnością pogłębiają się, ponieważ wiele serwerów internetowych nakłada sztywne ograniczenia na czas, przez jaki skrypt może działać. Pod żadnym pozorem nie należy przekazywać danych wejściowych utworzonych przez użytkownika bezpośrednio do bazy danych. Zawsze sprawdzaj dane wejściowe, aby upewnić się, że nie zakłóci funkcjonalności bazy danych ani nie spowoduje problemów z bezpieczeństwem w wyniku ataku SQL Injection.

Najlepiej byłoby użyć powyższych pętli, aby utworzyć SQL Batch (listę instrukcji), a następnie mieć PyODBC uruchomić na tej pojedynczej partii, ale byłby to bardzo zły pomysł, gdyby dane nie zostały oczyszczone.

Dlaczego dane miałyby być oczyszczane? Powód sprowadza się do bezpieczeństwa, ponieważ nigdy nie można ufać danym wprowadzanym przez użytkownika. Oczyszczanie danych oznacza reprezentowanie ich w sposób, który uniemożliwia wykonanie czegokolwiek innego niż instrukcja SQL stworzona przez programistę programu. Użytkownik może przekazać złośliwie skonstruowany ciąg, który umożliwi wykonanie arbitralnie utworzonego kodu SQL. Nazywa się to atakiem SQL Injection. Chociaż wartości danych przekazywane do partii można oczyścić, proces tego wykracza poza zakres samouczka wprowadzającego.

PyODBC zapewnia mechanizm ochrony bazy danych przed atakami SQL Injection poprzez oczyszczanie danych wejściowych użytkownika. Obejmują one użycie sparametryzowanych instrukcji , określane również jako przygotowane zestawienia . Bezpieczeństwo musi być zawsze priorytetem, nawet jeśli odbywa się to kosztem szybkości lub innych wskaźników wydajności.

Konto użytkownika systemu Windows, które ma dostęp do tej bazy danych, ma domyślnie uprawnienia administratora systemu. Oznacza to, że w przypadku ataku SQL Injection złośliwy użytkownik może uzyskać dostęp do wszystkich danych w każdej bazie danych na serwerze. W praktyce żadne konto z uprawnieniami administratora systemu nie powinno uzyskiwać dostępu do żadnej bazy danych z kodu Pythona.

Poniższa lista rozszerza pierwszy przykład kodu Pythona za pomocą PyODBC kursory do wstawiania danych:

# bad-band-name-maker2.py
import sys
import random
import pyodbc

part1 = ["The", "Uncooked", "Appealing", "Larger than Life", "Drooping", "Unwell", "Atrocious", "Glossy", "Barrage", "Unlawful"]
part2 = ["Defeated", "Hi-Fi", "Extraterrestrial", "Adumbration", "Limpid", "Looptid", "Cromulent", "Unsettled", "Soot", "Twinkle"]
part3 = ["Brain", "Segment", "Audio", "Legitimate Business", "Mentality", "Sound", "Canticle", "Monsoon", "Preserves", "Hangout"]

part4 = ["Cougar", "Lion", "Lynx", "Ocelot", "Puma", "Jaguar", "Panther"]
part5 = ["Fodder", "Ersatz Goods", "Leftovers", "Infant Formula", "Mush", "Smoothie", "Milkshakes"]


def main(argv):
  # Connect to the RazorDemo database.
  conn = pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=localhost\SQLEXPRESS;Database=RazorDemo;Trusted_Connection=yes;")

  # Generate 15 bad band names, and try to keep them unique.
  previousNames = ""
  nameCount = 0
  while (nameCount < 16):
    rand1 = random.randrange(0, 9)
    rand2 = random.randrange(0, 9)
    rand3 = random.randrange(0, 9)
    badName = part1[rand1] + ' ' + part2[rand2] + ' ' + part3[rand3]
    # A crude but effective way of ensuring uniqueness, although there is no unique constraint on the artist name in the database.
    # This prepends and appends bars to both the list of previously used names and the current name. If the current name is
    # new, it will not be in that string.
    if ("|" + previousNames + "|").find("|" + badName + "|") == -1: 
      print ("Band name [" + str(nameCount) + "] is [" + badName + "]")
      sql1 = "insert into artists (artist_name) values (?)"
      values1 = [badName]
      rs1 = conn.cursor()
      rs1.execute(sql1, values1)
      rs1.commit()
      # If the cursor is not closed, then other cursors cannot be executed.
      rs1.close()
      for y in range(1, 3):
        rand4 = random.randrange(0, len(part4))
        rand5 = random.randrange(0, len(part5))
        albumName = part4[rand4] + " " + part5[rand5]
        print ("\tAlbum [" + albumName + "]")
        sql2 = "insert into albums (artist_id, album_name) values ((select top 1 rcdid from artists where artist_name=?), ?)"
        # Each array item here corresponds to the position of the ? in the SQL statement above.
        values2 = [badName, albumName]
        rs2 = conn.cursor ()
        rs2.execute(sql2, values2)
        rs2.commit()
        rs2.close()
      # Creates a bar-delimited list of previously used names.
      if previousNames == "":
        previousNames = badName
      else:
        previousNames = previousNames + "|" + badName
      nameCount = 1 + nameCount
    else:
      print ("Found a duplicate of [" + badName + "]")
  #print (previousNames)
  # Close the Connection
  conn.close()
  return 0

if __name__ == "__main__":
	main(sys.argv[1:])





Listing 3 - Inserting the data

Następujące zapytanie można uruchomić w SSMS, aby zweryfikować dane wyjściowe kodu:

Rysunek 17 – Pomyślne wprowadzenie danych

Wybieranie danych w SQL Express i Pythonie

Teraz, gdy w bazie danych znajdują się dane, dobrze byłoby wykonać zapytanie. Poniżej znajduje się prosty skrypt, który akceptuje dane użytkownika z klawiatury i przekazuje je do bazy danych za pomocą sparametryzowanego zapytania:

# bad-band-name-maker3.py
import sys

import pyodbc

def main(argv):
  searchValue = input("Enter something: ")
  # Cap the length at something reasonable. The first 20 characters.
  searchValue = searchValue[0:20]
  # Set the search value to lower case so we can perform case-insensitive matching:
  searchValue = searchValue.lower()
  
  # Connect to the RazorDemo database.
  conn = pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=localhost\SQLEXPRESS;Database=RazorDemo;Trusted_Connection=yes;")

  # You must use a parameterized query here in order to protect from SQL Injection Attacks!
  
  # For the like operator, the percent signs must be separated from the term or else the parameterization will fail.
  
  sql1 = ("select a.artist_name, b.album_name from artists a, albums b where b.artist_id = a.rcdid and " +
    "lower(album_name) like ('%' + ? + '%') order by a.artist_name, b.album_name")
  # Below is an array with one element:
  values1 = [searchValue]
  rs1 = conn.cursor()
  rs1.execute(sql1, values1)
  rows1 = rs1.fetchone()
  #print ("Type is [" + str(type(rows1)) + "]")
  if str(type(rows1)).find("NoneType") == -1:
    while rows1:
      # Columns are indexed by number only. 0 is the a.artist_name column and 1 is the b.album_name columns
      print(rows1[0] + " - " + rows1[1])
      rows1 = rs1.fetchone()
  else:
    print ("No album name matched [" + searchValue + "]")
  # Close the Connection
  conn.close()

  return 0

if __name__ == "__main__":
	main(sys.argv[1:])



Listing 4 - Querying the Data

Te same wyniki. Jeden zawiera nawet przykład prymitywnego ataku SQL Injection:

Rysunek 18 – Wyniki zapytania. Zanotuj ostatnią wartość wyszukiwania.

Ostatnie przemyślenia na temat tworzenia baz danych w Pythonie

Naprawdę nie ma ograniczeń co do tego, jakie aplikacje oparte na SQL Server można tworzyć przy użyciu Pythona. Programista jest ograniczony jedynie znajomością SQL i miejmy nadzieję, że podstawowe koncepcje przedstawione w tym artykule mogą wskazać początkującemu programiście właściwy kierunek, jeśli chodzi o poszerzenie wiedzy o SQL i tworzenie bardziej złożonych aplikacji.

W tym samouczku programowania baz danych w języku Python przedstawiono sposoby, za pomocą których można zainstalować SQL Express jako rozwojowy stand-in dla SQL Server, i pokazał, jak można rozszerzyć Python 3, aby poprawnie komunikować się z instancją bazy danych SQL Express na tym serwerze. W tym artykule pokazano również, w jaki sposób należy używać programu SQL Server Management Studio do zarządzania dowolnymi bazami danych SQL Express lub SQL Server. Idąc dalej, artykuł ten poruszył również podstawowe środki ostrożności i wykorzystanie wydajnego kodowania w celu zapewnienia rozsądnych czasów wykonywania aplikacji opartych na SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikaj samooszukiwania się rozwiązań HA/DR

  2. Korzystanie z platformy Docker w usłudze Azure Container Service z klastrem Swarm

  3. Korzystanie z ODBC z Salesforce i OneLogin Single Sign On (SSO)

  4. Wprowadzenie do automatycznego skalowania Amazon Web Services (AWS)

  5. Mit, że DROP i OBCIĄŻ TABELĘ nie są rejestrowane