Подтвердить что ты не робот

Как подключить python к db2

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

4b9b3361

Ответ 1

Документацию трудно найти, и как только вы ее найдете, это довольно ужасно. Вот что я нашел за последние 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 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 a lot of rows,
        # we could run out of memory. In practice, I've never had that happen.
        # If it 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 имени столбца: значение.

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

Ответ 2

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

Вот недавний учебник по установке всего на Ubuntu Linux:

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

Ответ 3

После долгих поисков я обнаружил, как соединиться с 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)

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

Ответ 4

Вы можете подключиться к 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)

Ответ 5

Вы можете использовать библиотеку 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)

Ответ 6

Это для справок в будущем:

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

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;", "", "")

Ответ 7

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

Начиная с 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