Python+ODBC+Firebird (original) (raw)
К сожалению kinterbasdb (python расширение для работы с Firebird\Interbase) поддерживает на данный момент только 2.х версию python. Если надо обратится к Firebird из python 3, то нам на помощь придет ODBC. Проблема только в том что и для работы с ODBC в python тоже надо расширение (по моему это странно учитывая. распространенность ODBC). И так что нам понадобится скачать…
- Python for Windows Extensions — python расширение под Windows. На самом деле очень много и других возможностей кроме работы с ODBC. Например работа с COM, сервисами, буфером обмена и т.д.
- Firebird ODBC Drivers— собственно сам драйвер ODBC для Firebird
После установки всего этого богатства можете проверить драйвер и приступим
(Кстати в WinXP: Пуск-Панель управления-Администрирование- Источники данных (ODBC))
Создадим конфигурационный файл. С примерно следующим содержанием:
[base] base=127.0.0.1:D:\TEMP\SEMPLE.FDB user=SYSDBA password=masterkey
Сохраняем его под именем connect.ini
Скрипт из этого файла будет брать: путь до базы, пользователя базы и его пароль.
Теперь сам код.
-- coding: cp1251 --
import configparser import os import sys import odbc
--- читаем настройки ---
ini_file = os.path.dirname(sys.argv[0]); if ini_file[-1] != os.sep: ini_file = ini_file + os.sep ini_file = ini_file + 'connect.ini'
print('Файл кофигурации: ' + ini_file) if not os.path.exists(ini_file): print('!!! Файл конфигурации не найден.') sys.exit(0)
try: config = configparser.ConfigParser() config.read(ini_file)
if not config.has_section('base'):
print('В ini файле не обнаружена секция "Base"')
sys.exit(0)
pBase = {}
list_key = config.options('base')
for key in list_key:
pBase[key] =config.get('base',key)except Exception as info: print('!!! Ошибка чтения настроек: ' + str(info)) sys.exit(0)
--- работаем с базой ---
str_connect = "Driver=Firebird/InterBase(r) driver;UID=%s;PWD=%s;DBNAME=%s;" % (pBase['user'],pBase['password'],pBase['base']); print(str_connect) db = odbc.odbc(str_connect)
cursor = db.cursor() cursor.execute("select * from TABLE1") result = cursor.fetchall()
for rows in result: print(str(rows)) db.close();
Как сами видите — большая часть примера — это работа с ini фалом 🙂
Про строку подключения читаем в документации прилагаемой к ODBC. Для другого типа базы она разумеется будет отличатся.