ODBC

Uniwersalny standard API pozwalający aplikacjom łączyć się z różnymi bazami danych przez wspólny interfejs. Niezależny od języka i systemu.

ODBC (Open Database Connectivity) to standardowe API, dzięki któremu jedna aplikacja może gadać z wieloma różnymi bazami danych, nie znając ich wewnętrznych szczegółów. Piszesz kod raz, używając wspólnego interfejsu, a o resztę dba sterownik (driver) konkretnej bazy. Standard powstał w 1992 roku z inicjatywy Microsoftu i opiera się na specyfikacji SQL/CLI, więc nie jest przywiązany ani do jednego języka, ani do jednego systemu operacyjnego.

Jak to działa

Sednem ODBC jest warstwa pośrednia. Twoja aplikacja rozmawia z Driver Managerem (na Windows to odbc32.dll, na Linuksie najczęściej unixODBC), a ten przekazuje wywołania do odpowiedniego sterownika: jednego dla PostgreSQL, innego dla SQL Server, jeszcze innego dla Oracle czy nawet pliku Excela. Aplikacja wysyła zwykły SQL i standardowe funkcje, a sterownik tłumaczy je na język danej bazy.

W praktyce wskazujesz bazę przez DSN (Data Source Name) — nazwany wpis z hostem, portem i sterownikiem — albo przez connection string podawany bezpośrednio w kodzie. Najpiękniejsze jest to, że gdy klient migruje z MySQL na PostgreSQL, ty często zmieniasz tylko konfigurację połączenia, a nie logikę aplikacji.

Przykład z praktyki

Na Linuksie konfigurujesz źródła w plikach /etc/odbcinst.ini (sterowniki) i /etc/odbc.ini (DSN-y). Szybki test połączenia bez pisania kodu zrobisz narzędziem isql z pakietu unixODBC:

  • isql -v MojaBaza uzytkownik haslo

Jeśli zobaczysz Connected!, sterownik i DSN działają. W Pythonie ten sam DSN wykorzystasz przez bibliotekę pyodbc: pyodbc.connect("DSN=MojaBaza;UID=...;PWD=...") i już odpalasz cursor.execute("SELECT ...").

Na co uważać

Najczęstsza wpadka to architektura 32 vs 64 bity: 64-bitowa aplikacja nie załaduje 32-bitowego sterownika i odwrotnie. Na Windows masz wręcz dwa osobne panele administratora ODBC, co potrafi zmylić każdego. Druga pułapka to mylenie ODBC z JDBC — to drugie jest odpowiednikiem dla świata Javy i nie korzysta ze sterowników ODBC (choć istnieje mostek JDBC-ODBC, dziś uznawany za przestarzały i niezalecany).

Pamiętaj też, że ODBC bywa wolniejszy od natywnego sterownika bazy — płacisz wygodą uniwersalności za odrobinę narzutu. Dla większości aplikacji to nieistotne, ale przy ekstremalnej wydajności warto to zmierzyć.

Pojęcia powiązane

Warto znać: JDBC (odpowiednik dla Javy), OLE DB i ADO.NET (nowsze technologie dostępu do danych Microsoftu), DSN i connection string, unixODBC oraz biblioteki takie jak pyodbc. Wszystkie kręcą się wokół tej samej idei: oddzielić aplikację od konkretnej bazy danych.