在Windows Server 2016上,我们尝试通过JDBC与Jython脚本进行连接,但是我们的jaydebeapi.connect
语句给出以下错误:
TypeError:getConnection():第一个arg无法强制为String
但是,当我们查看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语句解决此字符串强制错误?
最佳答案
从JayDeBeApi
文档-
基本上,您只需导入jaydebeapi
Python模块并执行
connect
方法。这使您可以通过DB-API一致性连接
数据库。
connect
的第一个参数是Java驱动程序类的名称。
第二个参数是带有JDBC连接URL的字符串。第三
您可以选择提供一个由用户和密码组成的序列
或者包含内部参数的字典
作为属性传递给Java DriverManager.getConnection
方法。
有关详细信息,请参见DriverManager类的Javadoc。
您从DriverManager.getConnection
方法中收到此错误。
从Java文档中的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",)