如何使用JayDeBeApi连接到Postgres?它找不到org.postgresql.Driver

时间:2018-07-19 16:32:17

标签: database postgresql jdbc jaydebeapi

我必须连接到DB2以提取一些数据并创建Tableau Data Extract,为此,我想使用JayDeBeApi,并对其进行测试,我试图将自己连接到一个小的Postgres数据库,但是我无法建立与之的正确连接,因为它始终会引发以下错误:

jpype._jexception.RuntimeExceptionPyRaisable: java.lang.RuntimeException: Class org.postgresql.Driver not found

我当前的实现方式是

import jaydebeapi as jdbc

sql = 'Select * From world.city'
postgresql_class = 'org.postgresql.Driver'
postgresql_jdbc_path = 'path/to/postgresql-42.2.4.jar'
postgresql_url = 'jdbc:postgresql://host:port/database'
postgresql_user = 'user'
postgresql_pw = 'pass'

conn = jdbc.connect(postgresql_class, 
                    [postgresql_url, postgresql_user, postgresql_pw], 
                    postgresql_jdbc_path)

curs = conn.cursor()

curs.execute('SELECT * FROM csv_reports LIMIT 2')
curs.fetchall()
curs.close()
conn.close()

有人知道为了使这项工作我必须指定什么班级吗?还是我必须指定jdbc路径,以便JayDeBeApi可以使用该类之类的东西

1 个答案:

答案 0 :(得分:0)

根据JayDeBeApi documentation

  

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

因此,您不应在用户名和密码中包括连接URL。它应该单独作为第二个参数:

jdbc.connect(postgresql_class, 
             postgresql_url, 
             [postgresql_user, postgresql_pw], 
             postgresql_jdbc_path)