IT записки

Python+ODBC+Firebird

Posted in Firebird, Python by borismor on Апрель 26, 2010

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

About these ads
Tagged with: ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Отслеживать

Get every new post delivered to your Inbox.

%d bloggers like this: