Python:JDBC 使用 JayDeBeApi 时出现连接错误
Python: JDBC Connection Error using JayDeBeApi
我在 运行 执行代码时遇到错误。请帮我解决这个问题或建议通过 JDBC.
连接 Vertica 服务器的替代方法
我也尝试过使用 pyspark 进行连接。但是使用 pyspark 我们无法在 vertica 服务器中执行 sql 查询。
系统配置:
Linux 与 python 3.7.0
jaydebeapi 版本 - 1.1.1
jpype 版本 - 0.7.2
import jaydebeapi
import jpype
jdbc_url = 'jdbc:vertica://XX.XX.XXX.XXX/DATA?XXXXX'
vertica_properties={"user": "XXXX", "password": "XXXXX"}
jars = ['XXXX/vertica-jdbc-9.3.1-0.jar',
'XXXX/vertica-spark2.1_scala2.11.jar',
'XXXX/CustomVerticaDialect.jar']
connection = jaydebeapi.connect(jclassname='com.vertica.jdbc.Driver', url=jdbc_url, driver_args=vertica_properties, jars=jars)
connection
错误
--------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-5-cc7d2752ecd8> in <module>()
----> 1 connection = jaydebeapi.connect(jclassname='com.vertica.jdbc.Driver', url=jdbc_url, driver_args=vertica_properties, jars=jars)
2 connection
/BDAPP/python/anaconda3/lib/python3.7/site-packages/jaydebeapi/__init__.py in connect(jclassname, url, driver_args, jars, libs)
379 else:
380 libs = []
--> 381 jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
382 return Connection(jconn, _converters)
383
/BDAPP/python/anaconda3/lib/python3.7/site-packages/jaydebeapi/__init__.py in _jdbc_connect_jpype(jclassname, url, driver_args, jars, libs)
180 types = jpype.java.sql.Types
181 types_map = {}
--> 182 for i in types.__javaclass__.getClassFields():
183 types_map[i.getName()] = i.getStaticAttribute()
184 _init_types(types_map)
AttributeError: type object 'java.sql.Types' has no attribute '__javaclass__'
截至 2020 年 3 月,jaydebeapi 似乎与 jpype 0.7.2 不兼容。这是指出此问题的 github 页面:http://github.com/baztian/jaydebeapi/issues/99。
根据 github 页面的解决方案是使用以下任一方法将 jpype 降级为 jpype 0.6.3:
pip install JPype1==0.6.3 --force-reinstall
或
conda install -c conda-forge JPype1=0.6.3 --force-reinstall
降级 jpype 对我有用
请升级到 JayDeBeApi>=1.2.1。从 JPype1 0.7.0 开始,引入了一些不向后兼容的更改。较新的 JayDeBeApi 版本可以解决这个问题。
pip install --upgrade JayDeBeApi
我在 运行 执行代码时遇到错误。请帮我解决这个问题或建议通过 JDBC.
连接 Vertica 服务器的替代方法我也尝试过使用 pyspark 进行连接。但是使用 pyspark 我们无法在 vertica 服务器中执行 sql 查询。
系统配置:
Linux 与 python 3.7.0
jaydebeapi 版本 - 1.1.1
jpype 版本 - 0.7.2
import jaydebeapi
import jpype
jdbc_url = 'jdbc:vertica://XX.XX.XXX.XXX/DATA?XXXXX'
vertica_properties={"user": "XXXX", "password": "XXXXX"}
jars = ['XXXX/vertica-jdbc-9.3.1-0.jar',
'XXXX/vertica-spark2.1_scala2.11.jar',
'XXXX/CustomVerticaDialect.jar']
connection = jaydebeapi.connect(jclassname='com.vertica.jdbc.Driver', url=jdbc_url, driver_args=vertica_properties, jars=jars)
connection
错误
--------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-5-cc7d2752ecd8> in <module>()
----> 1 connection = jaydebeapi.connect(jclassname='com.vertica.jdbc.Driver', url=jdbc_url, driver_args=vertica_properties, jars=jars)
2 connection
/BDAPP/python/anaconda3/lib/python3.7/site-packages/jaydebeapi/__init__.py in connect(jclassname, url, driver_args, jars, libs)
379 else:
380 libs = []
--> 381 jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
382 return Connection(jconn, _converters)
383
/BDAPP/python/anaconda3/lib/python3.7/site-packages/jaydebeapi/__init__.py in _jdbc_connect_jpype(jclassname, url, driver_args, jars, libs)
180 types = jpype.java.sql.Types
181 types_map = {}
--> 182 for i in types.__javaclass__.getClassFields():
183 types_map[i.getName()] = i.getStaticAttribute()
184 _init_types(types_map)
AttributeError: type object 'java.sql.Types' has no attribute '__javaclass__'
截至 2020 年 3 月,jaydebeapi 似乎与 jpype 0.7.2 不兼容。这是指出此问题的 github 页面:http://github.com/baztian/jaydebeapi/issues/99。
根据 github 页面的解决方案是使用以下任一方法将 jpype 降级为 jpype 0.6.3:
pip install JPype1==0.6.3 --force-reinstall
或
conda install -c conda-forge JPype1=0.6.3 --force-reinstall
降级 jpype 对我有用
请升级到 JayDeBeApi>=1.2.1。从 JPype1 0.7.0 开始,引入了一些不向后兼容的更改。较新的 JayDeBeApi 版本可以解决这个问题。
pip install --upgrade JayDeBeApi