Как подключить питона к db2 - PullRequest
26 голосов
/ 18 мая 2011

Есть ли способ to connect python to DB2?

Ответы [ 7 ]

16 голосов
/ 03 февраля 2016

Документацию сложно найти, и как только вы ее найдете, она довольно ужасна.Вот что я нашел за последние 3 часа.

Вам необходимо установить ibm_db, используя pip, следующим образом:

pip install ibm_db

Вы захотите создать соединениеобъект. Документация здесь.

Вот что я написал:

from ibm_db import connect
# Careful with the punctuation here - we have 3 arguments.
# The first is a big string with semicolons in it.
# (Strings separated by only whitespace, newlines included,
#  are automatically joined together, in case you didn't know.)
# The last two are emptry strings.
connection = connect('DATABASE=<database name>;'
                     'HOSTNAME=<database ip>;'  # 127.0.0.1 or localhost works if it's local
                     'PORT=<database port>;'
                     'PROTOCOL=TCPIP;'
                     'UID=<database username>;'
                     'PWD=<username password>;', '', '')

Далее вы должны знать, что команды на ibm_db фактически никогда не дают вам результатов.Вместо этого вам нужно повторно вызывать один из методов fetch в команде, чтобы получить результаты.Я написал эту вспомогательную функцию, чтобы справиться с этим.

def results(command):
    from ibm_db import fetch_assoc

    ret = []
    result = fetch_assoc(command)
    while result:
        # This builds a list in memory. Theoretically, if there's a lot of rows,
        # we could run out of memory. In practice, I've never had that happen.
        # If it's ever a problem, you could use
        #     yield result
        # Then this function would become a generator. You lose the ability to access
        # results by index or slice them or whatever, but you retain
        # the ability to iterate on them.
        ret.append(result)
        result = fetch_assoc(command)
    return ret  # Ditch this line if you choose to use a generator.

Теперь с этой определенной вспомогательной функцией вы можете легко сделать что-то вроде получения информации обо всех таблицах в вашей базе данных с помощью следующего:

from ibm_db import tables

t = results(tables(connection))

Если вы хотите видеть все в данной таблице, вы можете сделать что-то вроде этого сейчас:

from ibm_db import exec_immediate

sql = 'LIST * FROM ' + t[170]['TABLE_NAME']  # Using our list of tables t from before...
rows = results(exec_immediate(connection, sql))

А теперь rows содержит list строк из 170-готаблица в вашей базе данных, где каждая строка содержит dict имя столбца: значение.

Надеюсь, это все поможет.

10 голосов
/ 19 мая 2011

ibm-db, официальный драйвер DB2 для Python и Django находится здесь:

Вот недавнее руководство по установке всего на UbuntuLinux:

Следует отметить, что существовало несколько более старых неофициальных драйверов DB2 для Python.ibm-db - это тот, который вы должны использовать.

6 голосов
/ 01 мая 2018

После долгих поисков я обнаружил, как соединиться с DB2, используя ibm_db.

Прежде всего, если вы используете версию Python выше 3.2, используйте

pip install ibm_db == 2.0.8a

версия 2.0.8 (последняя) не удастся установить.

затем используйте следующее для подключения

import ibm_db_dbi as db

conn = db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username;PWD=password;", "", "")

список таблиц с

for t in conn.tables():
    print(t)

и выполнить SQL с

cursor = conn.cursor()
cursor.execute("SELECT * FROM Schema.Table")
for r in cursor.fetchall():
    print(r)

проверьте эту ссылку для официальной не очень точной документации

2 голосов
/ 25 января 2019

В дополнение к @ prof1990 response :

Начиная с 2.0.9 (16 августа 2018 г.), также с Python 3 вы можете просто использовать:

pip install ibm_db

Справка:

https://github.com/ibmdb/python-ibmdb#updated-ibm_db

Пример подключения здесь :

import ibm_db
ibm_db.connect("DATABASE=<dbname>;HOSTNAME=<host>;PORT=<60000>;PROTOCOL=TCPIP;UID=<username>;PWD=<password>;", "", "")

Полная документация API здесь:

https://github.com/ibmdb/python-ibmdb/wiki/APIs

2 голосов
/ 16 марта 2018

Вы можете подключиться к db2 из python, используя jaydeapi. Сначала установите библиотеку, запустив pip install. Jaydeapi загрузите db2jcc4.jar. Затем вы можете подключиться, используя следующий код: передавая имя хоста, portno, идентификатор пользователя, имя базы паролей

import jaydebeapi

conn_src = jaydebeapi.connect(
    'com.ibm.db2.jcc.DB2Driver',
    ['YourHostName:PortNo/DatabaseName','userid','password'],'C:/db2jcc4.jar'
)

cursor=conn_src.cursor()
sql = 'Select * from schemaname.TableName fetch first 100 rows only '

cursor.execute(sql)
print("fetchall:")
result = cursor.fetchall()
for r in result:
    print(r)
0 голосов
/ 14 июня 2017

Это для дальнейшего использования:

Официальные документы по установке скажем:

Python 2.5 или более поздняя версия, исключая Python 3.X.

pip install ibm_db

Он работал только на Python 2.7 для меня;это не для 3.X.Кроме того, мне пришлось установить Python 2.7 по умолчанию (вместо Python 3), чтобы установка работала (в противном случае возникли бы ошибки при установке).

Пример использования официальных документов :

import ibm_db 
ibm_db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username; PWD=password;", "", "")
0 голосов
/ 15 февраля 2015

Вы можете использовать библиотеку ibm_db для подключения к DB2.

query_str = "SELECT COUNT(*) FROM table_name"

conn = ibm_db.pconnect("dsn=write","usrname","secret")
query_stmt   = ibm_db.prepare(conn, query_str)
ibm_db.execute(query_stmt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...