【问题标题】:How to fix SQLAlchemy connection problem: 'Connection info needed in SQLAlchemy format' when connecting to IBM db2 server hosted on IBM Cloud如何修复 SQLAlchemy 连接问题:连接到 IBM Cloud 上托管的 IBM db2 服务器时出现“需要 SQLAlchemy 格式的连接信息”
【发布时间】:2019-05-12 11:16:16
【问题描述】:

所以,过去几天我一直在尝试连接到托管在 IBM 云上的 IBM DB2 服务器,并设法使用提供的凭据以及“ibm_db”、“ibm_db_sa”和“ibm_db_dbi”连接到它' 模块。但是,当我导入 SQL magic 并尝试连接到服务器时,它失败了。

我一共尝试了3种方法:IBM推荐的方法,以及我在互联网上找到的一些其他方法,可惜都失败了。

方法 1(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 来操作数据库。

谢谢!

附:如果我听起来很粗鲁或以某种方式冒犯了您,请理解英语不是我的母语。 :(

【问题讨论】:

    标签: python


    【解决方案1】:

    为 IBM DB2 使用现有的 python library

    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()
    

    Reference1 , Reference2

    【讨论】:

    • 这里您使用的是用户名和密码,但我想我没有。应该怎么做?
    • 我建议你设置一个用户名和密码。无论如何使用下面的连接字符串 - Ibm_db_sa://host.name.com:50000/database
    【解决方案2】:

    我遇到了同样的问题,但后来 pip 安装了 ibm_db_sa,然后确保按上述方式导入,然后就成功了。

    【讨论】:

      【解决方案3】:
      #try this;
      %sql ibm_db_sa://my-username:my-password@my-hostname:my-port/my-db-name?security=SSL
      

      #DB2 可能有问题,当上次相同的代码工作时,我也没能坚持多久。 2021 年 12 月 30 日

      【讨论】:

        【解决方案4】:

        安装 1.3.9 版本的 sqlalchemy 为我解决了这个问题:

        !pip install sqlalchemy==1.3.9
        

        【讨论】:

          猜你喜欢
          • 2020-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-10
          • 2023-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多