1

在 Windows Server 2016 上,我们尝试使用 Jython 脚本通过 JDBC 连接,但我们的jaydebeapi.connect语句给出以下错误:

TypeError: getConnection(): 1st arg 不能被强制转换为 String

然而,当我们查看使用 jaydebeapi 的示例时,第一个参数一个字符串。

这是我们的 Python 代码:

jclassname = "com.microsoft.sqlserver.jdbc.SQLServerDriver" 
database = "our_database_name"
db_elem = ";databaseName={}".format(database) if database else ""
host = "###.##.###.###" # ip address
port = "1433"    
user = "user_name"
password = "password"  
url = (jdbc:sqlserver://{host}:{port}{db_elem}"        ";user={user};password={password}".format(host=host, port=port, db_elem=db_elem,  er=user, password=password)    )    
print url
driver_args = [url]
jars = None
libs = None
db = jaydebeapi.connect(jclassname, driver_args, jars=jars, libs=libs)

这就是我们运行 Python 脚本的方式:

C:\jython2.7.0\bin\jython.exe C:\path_to_our_script.py

我们缺少什么?我们如何为我们的 jaydebeapi.connect 语句解决这个字符串强制错误?

4

1 回答 1

1

JayDeBeApi文档-

基本上,您只需导入jaydebeapiPython 模块并执行该 connect方法。这为您提供了与数据库的 DB-API 一致连接。

第一个参数connect是 Java 驱动程序类的名称。第二个参数是一个带有 JDBC 连接 URL 的字符串。第三,您可以选择提供由用户和密码组成的序列,或者提供包含参数的字典,这些参数在内部作为属性传递给 JavaDriverManager.getConnection方法。有关详细信息,请参阅DriverManager类的 Javadoc 。

您从该DriverManager.getConnection方法中收到此错误。

来自 JavaDocs DriverManager-

public static Connection getConnection(String url, Properties info)

所以,你的jaydebeapi.connect函数调用搞砸了。您的第二个参数应该是url字符串。

以下是JayDeBeApi文档中的示例片段。

>>> import jaydebeapi
>>> conn = jaydebeapi.connect("org.hsqldb.jdbcDriver",
...                           "jdbc:hsqldb:mem:.",
...                           ["SA", ""],
...                           "/path/to/hsqldb.jar",)
于 2019-12-20T18:36:38.823 回答