【问题标题】:How to solve a "1st arg can't be coerced to String" for a jaydebeapi.connect command?如何解决 jaydebeapi.connect 命令的“第一个参数不能被强制转换为字符串”?
【发布时间】:2020-04-12 12:02:49
【问题描述】:

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

TypeError: getConnection(): 第一个参数不能被强制转换为字符串

然而,当我们查看examples of using 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 语句解决这个字符串强制错误?

【问题讨论】:

    标签: java python jython windows-server-2016 jaydebeapi


    【解决方案1】:

    来自JayDeBeApi Docs -

    基本上你只需导入jaydebeapi Python 模块并执行 connect 方法。这为您提供了一个符合 DB-API 的连接到 数据库。

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

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

    来自DriverManager 的 JavaDocs -

    public static Connection getConnection(String url, Properties info)
    

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

    以下是来自JayDeBeApi 文档的示例 sn-p。

    >>> import jaydebeapi
    >>> conn = jaydebeapi.connect("org.hsqldb.jdbcDriver",
    ...                           "jdbc:hsqldb:mem:.",
    ...                           ["SA", ""],
    ...                           "/path/to/hsqldb.jar",)
    

    【讨论】:

    • 是的,URL 确实需要是一个字符串。我们认为是这样,但我们意识到这是错误的这一行:“driver_args = [url]” 该行将字符串变成了一个列表。一旦我们删除它,代码就可以工作了。
    猜你喜欢
    • 2015-10-24
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多