簡體   English   中英

如何解決 SQLAlchemy 連接問題:連接到 IBM Cloud 上托管的 IBM db2 服務器時,“需要 SQLAlchemy 格式的連接信息”

[英]How to fix SQLAlchemy connection problem: 'Connection info needed in SQLAlchemy format' when connecting to IBM db2 server hosted on IBM Cloud

因此,過去幾天我一直在嘗試連接到托管在 IBM 雲上的 IBM DB2 服務器,並使用提供的憑證和“ibm_db”、“ibm_db_sa”和“ibm_db_dbi”模塊設法連接到它。 但是,當我導入 SQL 魔法並嘗試連接到服務器時,它失敗了。

我一共嘗試了3種方法:IBM推薦的方法,以及我在inte.net上找到的其他一些方法,遺憾的是都失敗了。

方法一(IBM推薦):

import ibm_db
import ibm_db_sa
import sqlalchemy
from sqlalchemy import *
%load_ext sql

%sql ibm_db_sa://qcf54xxx:qz^d5stlkbr6lxxx@https://dashdb-txn-sbox-yp-dal09-03.services.dal.bluemix.net:50000/BLUDB

錯誤:

Connection info needed in SQLAlchemy format, example:
               postgresql://username:password@hostname/dbname
               or an existing connection: dict_keys([])
invalid literal for int() with base 10: ''
Connection info needed in SQLAlchemy format, example:
               postgresql://username:password@hostname/dbname
               or an existing connection: dict_keys([])

方法二:

from sqlalchemy import create_engine
engine = create_engine('ibm_db_sa://qcf54xxx:qz^d5stlkbr6lxxx@dashdb-txn-sbox-yp-dal09-03.services.dal.bluemix.net:50000/BLUDB')

錯誤:

Invalid Syntax

方法三:

import sqlalchemy
from sqlalchemy import *
import ibm_db_sa
db2 = sqlalchemy.create_engine('ibm_db_sa://qcf54xxx:qz^d5stlkbr6lxxx@dashdb-txn-sbox-yp-dal09-03.services.dal.bluemix.net:50000/BLUDB')
metadata = MetaData()

錯誤:

Invalid Syntax

成功的方法(沒有SQLAlchemy的方法)【僅供參考】:

import ibm_db
import ibm_db_sa
import ibm_db_dbi
import pandas
#Connects to the IBM database
dsn_hostname = "dashdb-txn-sbox-yp-dal09-03.services.dal.bluemix.net" # e.g.: "dashdb-txn-sbox-yp-dal09-04.services.dal.bluemix.net"
dsn_uid = "qcf54xxx"        # e.g. "abc12345"
dsn_pwd = "qz^d5stlkbr6lxxx"      # e.g. "7dBZ3wWt9XN6$o0J"

dsn_driver = "{IBM DB2 ODBC DRIVER}"
dsn_database = "BLUDB"            # e.g. "BLUDB"
dsn_port = "50000"                # e.g. "50000" 
dsn_protocol = "TCPIP"            # i.e. "TCPIP"

#DO NOT MODIFY THIS CELL. Just RUN it with Shift + Enter
#Create the dsn connection string
dsn = (
    "DRIVER={0};"
    "DATABASE={1};"
    "HOSTNAME={2};"
    "PORT={3};"
    "PROTOCOL={4};"
    "UID={5};"
    "PWD={6};").format(dsn_driver, dsn_database, dsn_hostname, dsn_port, dsn_protocol, dsn_uid, dsn_pwd)

#print the connection string to check correct values are specified
print(dsn)

#DO NOT MODIFY THIS CELL. Just RUN it with Shift + Enter
#Create database connection

try:
    conn = ibm_db.connect(dsn, "", "")
    print ("Connected to database: ", dsn_database, "as user: ", dsn_uid, "on host: ", dsn_hostname)

except:
    print ("Unable to connect: ", ibm_db.conn_errormsg() )

我希望能夠使用 %sql 來操作數據庫。

謝謝!

PS 如果我聽起來很粗魯或以某種方式冒犯了你,請理解英語不是我的母語。 :(

使用現有的IBM DB2 python

import sqlalchemy
from sqlalchemy import *
import ibm_db_sa.ibm_db_sa

db2 = sqlalchemy.create_engine('ibm_db_sa://user:password@host.name.com:50000/database')
db2.connect()
metadata = MetaData()

users = Table('STAFF', metadata, 
Column('ID', Integer, primary_key = True),
Column('NAME', String(9), nullable = False),
Column('DEPT', Integer, nullable = False),
Column('JOB', String(5), nullable = False)
)
metadata.create_all()

參考文獻1參考文獻2

我遇到了同樣的問題,但隨后對 ibm_db_sa 進行了 pip 安裝,然后確保按上述方式導入,然后它就起作用了。

#try this;
%sql ibm_db_sa://my-username:my-password@my-hostname:my-port/my-db-name?security=SSL

#DB2 可能有問題,當相同的代碼上次工作時,我也沒有渴望。 30/12/2021

安裝 1.3.9 版本的 sqlalchemy 為我解決了這個問題:

!pip install sqlalchemy==1.3.9

您可以嘗試添加;security=SSL

... @hostname:port/bludb;security=SSL

連接字符串的末尾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM