使用JDBC,Python和JayDeBeApi连接到Filemaker数据库

问题描述:

我正在尝试编写AWS Lambda Python包,它将通过JDBC连接到FileMaker数据库。为了测试,我使用Lambda Linux AMI启动了一个EC2实例,并创建了一个我正在测试的virtualenv(/ venv)。我已经使用WinSCP将fmjdbc.jar上传到/ venv/lib/fmjdbc.jar。该代码使用JayDeBeApi,下面的使用示例在这里:https://pypi.python.org/pypi/JayDeBeApi/#usage使用JDBC,Python和JayDeBeApi连接到Filemaker数据库

我到目前为止的代码如下:

import jaydebeapi as jdb 

driverclass = 'com.filemaker.jdbc.Driver' 
jdbcURL = 'jdbc:filemaker://url:port;database' 


jar = '/home/ec2-user/lambda-test-project/venv/lib/fmjdbc.jar' 
print jar 

conn = jdb.connect(driverclass,[jdbcURL,'username','password'],jar) 

这给我的错误:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/ec2-user/lambda-test-project/venv/local/lib/python2.7/site-package            s/jaydebeapi/__init__.py", line 359, in connect 
    jconn = _jdbc_connect(jclassname, jars, libs, *driver_args) 
    File "/home/ec2-user/lambda-test-project/venv/local/lib/python2.7/site-package            s/jaydebeapi/__init__.py", line 183, in _jdbc_connect_jpype 
    return jpype.java.sql.DriverManager.getConnection(*driver_args) 
jpype._jexception.SQLExceptionPyRaisable: java.sql.SQLException: No suitable driver found for jdbc:filemaker://<MY URL STUFF IS HERE> 

我怎样才能得到的jdbc驱动程序被Python的虚拟环境读取?我希望最终可以在Lambda包中使用此代码,所以我希望有一个可以集成到Python代码中的解决方案,该代码可以在新创建的服务器上重复使用。

+0

的[JayDeBeApi文档(https://pypi.python.org/pypi/JayDeBeApi/)说:“如果你正在使用的CPython确保已安装[JPype(https://开头的PyPI。 python.org/pypi/JPype1/)。“你做到了吗? –

你可以使用jpype包来为python设置驱动程序。我以前用它来连接Oracle DB。有我的示例代码可能对你有用。

import jaydebeapi,jpype 

classpath = "your jdbc jar driver path" 

jvm_path = "/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.36.x86_64/jre/lib/amd64/server/libjvm.so" #your java vm path 

jpype.startJVM(jvm_path, "-Djava.class.path=%s" % classpath) #start jvm based on the driver 

conn = jaydebeapi.connect(xxxxxx) 
+0

这可行,但只有一个迭代认为该计划。如果我尝试在几分钟后再次运行相同的脚本,则会收到以下错误: '无法在native/common/jp_env.cpp:78'启动JVM。 任何想法,为什么这是? – user2752159