Python+ODBC+Firebird
К сожалению 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. Для другого типа базы она разумеется будет отличатся.
leave a comment