воскресенье, 12 февраля 2012 г.

Как подружить Python 3 и Firebird а результат их дружбы выгрузить в таблицу.

   Оказывается драйвер для взаимодействия с FireBird (KInterbasDB) доступен только для Python 2.x, так что будем использовать ODBC. Для этого качаем:
   Результат работы скрипта будем писать в csv-файл с помощью csv-модуля.
   Затем создаем файл конфигурации conf.ini

[base]
base=127.0.0.1:D:\BASE\BASE.FDB
user=SYSDBA
password=masterkey

Затем создаем сам скрипт, с таким содержанием:

  1. import configparser
  2. import os
  3. import sys
  4. import odbc
  5. import csv
  6.  
  7. # --- читаем настройки ---
  8. ini_file = os.path.dirname(sys.argv[0]);
  9. if ini_file[-1!os.sep:
  10.     ini_file = ini_file + os.sep
  11. ini_file = ini_file + 'conf.ini'
  12.  
  13. print('Файл кофигурации: ' + ini_file)
  14. if not os.path.exists(ini_file):
  15.     print('!!! Файл конфигурации не найден.')
  16.     sys.exit(0
  17.  
  18. try:
  19.     config = configparser.ConfigParser()
  20.     config.read(ini_file)
  21.  
  22.     if not config.has_section('base'):
  23.         print('В ini файле не обнаружена секция "Base"')
  24.         sys.exit(0)
  25.  
  26.     pBase = {}
  27.     list_key = config.options('base')
  28.     for key in list_key:
  29.         pBase[key] =config.get('base',key)
  30.  
  31. except Exception as info:
  32.     print('!!! Ошибка чтения настроек: ' + str(info))
  33.     sys.exit(0)
  34.  
  35. # --- работаем с базой ---
  36. str_connect = "Driver=Firebird/InterBase(r) driver;UID=%s;PWD=%s;DBNAME=%s;" % (pBase['user'],pBase['password'],pBase['base']);
  37. print(str_connect)
  38. db = odbc.odbc(str_connect)
  39.  
  40. cursor = db.cursor()
  41. cursor.execute("select * from AVTO_IN_TMP")
  42. result = cursor.fetchall()
  43.  
  44. # ---- writing results ----
  45. with open('some.csv''w+', encoding='cp1251', newline=''as f:
  46.     writer=csv.writer(f, dialect=csv.excel)
  47.     writer.writerows(result)
  48.     f.close()
  49. db.close()
    Всё оказывается очень просто;)
    Идея http://borisnote.wordpress.com/2010/04/26/pythonodbcfirebird/

Комментариев нет:

Отправить комментарий