« pythonでMySQL Connectorを使ってデータベースに接続してみる | トップページ | Nexus7のアダプターを郵便で送ってみた »

2014-08-30

PythonでKInterbasDBを使ってFirebirdデータベースに接続してみる

KInterbasDBのダウンロード / インストール

Windowsは7と8で両方とも64bitです。Pythonバージョンは2.7なのでkinterbasdb-3.3.0.win-amd64-py2.7.msiをダウンロードしてインストール。

Linuxはkinterbasdb-3.3.0.tar.bz2をインストールしました。

tar xzvf kinterbasdb-3.3.0.tar.bz2
cd kinterbasdb-3.3.0
python setup.py install

接続テスト

古いLinux機を使っているため文字コードがEUC-JPです。
また、使用しているfirebirdは1.5です。
pythonのバージョンは2.4です。

Windows 7と8.1の64bitでも、同じような方法で接続できました。
Python2.7firebird 2.1です。

# -*- coding: euc-jp -*-

import site
import kinterbasdb

def test_conn():
    con = kinterbasdb.connect(dsn='127.0.0.1:/var/gdb/test.gdb',
                              user='sysdba',
                              password='masterkey')
    cur = con.cursor()
    cur.execute('SELECT FIRST 20 ID, TITLE FROM TEST_TBL ORDER BY ID DESC')
    rows = cur.fetchall()
    for (id, title) in rows:
        print '%d\t%s' % (id, unicode(title, 'euc-jp'))
        # Windowsなどでは以下の
        # print '%d\t%s' % (id, unicode(title))
        # で動くと思う
    cur.close()
    con.close()

if __name__ == '__main__':
    test_conn()

14行目の出力の部分は、データベースに格納されているデータの文字コードとの関係があると思います。私の環境ではunicode(titie)ではエラーが出てしまったので、'euc-jp'を渡していますが、Windows環境でデータの文字コードをUNICODE_FSSに指定した環境ではunicode(title)だけで正常に出力してくれました。

レコードをフィールド名と値のディクショナリで取得する

ディクショナリで取得するにはfetchallmap()など、fetch*メソッドにmapをつけるとディクショナリで取得できるようです。実際にやってみました。

# -*- coding: euc-jp -*-

import site
import kinterbasdb

def test_conn():
    con = kinterbasdb.connect(dsn='127.0.0.1:/var/gdb/test.gdb',
                              user='sysdba',
                              password='masterkey')
    cur = con.cursor()
    cur.execute('SELECT FIRST 20 ID, TITLE FROM TEST_TBL ORDER BY ID DESC')
    rows = cur.fetchallmap()
    for fields in rows:
        print '%d\t%s' % (fields["id"], unicode(fields["title"], 'euc-jp'))
        # Windowsなどでは以下の
        # print '%d\t%s' % (id, unicode(title))
        # で動くと思う
    cur.close()
    con.close()

if __name__ == '__main__':
    test_conn()


|

« pythonでMySQL Connectorを使ってデータベースに接続してみる | トップページ | Nexus7のアダプターを郵便で送ってみた »

python」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: PythonでKInterbasDBを使ってFirebirdデータベースに接続してみる:

« pythonでMySQL Connectorを使ってデータベースに接続してみる | トップページ | Nexus7のアダプターを郵便で送ってみた »