【发布时间】:2019-01-18 03:10:06
【问题描述】:
我正在尝试用 Python 与 AS400 交谈。目标是使用 SQLAlchemy,但当我无法让它工作时,我退回到一个更基本的脚本,只使用 ibm_db 而不是 ibm_db_sa。
import ibm_db
dbConnection = ibm_db.pconnect("DATABASE=myLibrary;HOSTNAME=1.2.3.4;PORT=8471;PROTOCOL=TCPIP;UID=username;PWD=password", "", "") #this line is where it hangs
print ibm_db.conn_errormsg()
问题似乎出在端口上。如果我使用在所有示例中看到的 50000,则会出现错误。如果我使用 446,我会收到错误消息。令人费解的是:如果我使用 8471,IBM says to do,我不会收到任何错误,没有超时,没有任何响应。我已经让脚本运行了二十多分钟,它就坐在那里,什么也不做。它处于活动状态,因为我根本无法使用命令提示符,但它从来没有给我任何形式的反馈。
我每天工作的公司都使用同样的 400,用于记录、发送电子邮件和(大量)数据库使用,所以我知道它有效。我们使用的软件在幕后与数据库对话,在我的机器上运行良好。这告诉我我的驱动程序很好,网络设置正确,等等。我什至可以从这里 telnet 到 400。
我在 SQLAlchemy 和 ibm_db 电子邮件列表中,并且已经就这个问题与他们沟通了几天。我也用谷歌搜索了很多,我开始在我的搜索结果中用完未访问的链接。似乎没有人有连接无限期挂起的问题。如果有什么我可以在 Python 中尝试的,我会尝试的。我不直接处理 400,但我可以要求负责检查/配置我需要的任何东西的人。正如我所说,几个工作站可以毫无问题地与 400 的数据库通信,并且如果从 400 本身运行查询,则针对我想要访问的库运行的查询工作正常。如果有人有任何建议,我将不胜感激。谢谢!
【问题讨论】:
-
如果你在这方面取得了任何进展,如果你在这里分享它会很棒。我正在查看
ibm_db_sa的代码,看看是否有什么东西突然出现在我身上,并且发生了一些事情:pyodbc.pymodule withinibm_db_sa有一个名为AS400Dialect_pyodbc的类,它具有pyodbc_driver_name的正确值。很明显,至少 一些 尝试让 SQLAlchemy 与 DB2 for i 一起工作。 -
我没有。好吧,我的应用程序正在发展,但现在我只依赖 pyodbc。我尝试通过连接到 pyodbc 来使用 SA,然后将执行连接的函数传递给 create_engine,但这不起作用。
-
没有 SQLAlchemy 的额外功能对您的伤害有多大?您(a)对 Python 的了解程度和(b)对 SQLAlchemy 的了解程度如何?我问的原因是因为通过更多的戳戳和刺激,我设法让
create_engine()成功创建了一个引擎,并使用该引擎进行裸 SQL 查询。换句话说,我可以让 SQLAlchemy 充当 PyODBC 的极其复杂的包装器,而没有任何附加值。我很高兴分享我的发现,但我从未使用过 ORM,因此在您充分利用 SQLAlchemy 之前,可能还存在更多问题。 -
因此,您的知识来源是,如果需要进行更多的实验和修复,您可能不得不卷起袖子,弄脏手。
-
我在 Python 中感觉很舒服,但我是 SQLAlchemy 的新手。我想使用SA的主要原因是ORM的方便,所以如果它只能处理直接的SQL,我想我还不如坚持使用pyodbc。不过,感谢您的跟进。
标签: python database ibm-midrange