【问题标题】:Connect to Filemaker Database using JDBC, Python, and JayDeBeApi使用 JDBC、Python 和 JayDeBeApi 连接到 Filemaker 数据库
【发布时间】:2016-05-20 20:42:02
【问题描述】:

我正在尝试编写一个 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

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

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>

如何让 Python 的虚拟环境读取 jdbc 驱动程序?我希望这些代码最终能在 Lambda 包中工作,所以我希望有一个可以集成到 Python 代码中的解决方案,可以在新创建的服务器上重复工作。

【问题讨论】:

  • JayDeBeApi documentation 说:“如果您使用 cPython,请确保您已正确安装 JPype。”你做到了吗?
  • 嗨,如果您能够从 AWS Lambda Python 环境连接到 Informix DB,是否有任何步骤或 lambda 层可以共享?

标签: python linux jdbc lambda jaydebeapi


【解决方案1】:

您可以使用 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)

【讨论】:

  • 这行得通,但只有一次迭代认为该程序。如果我在几分钟后再次尝试运行相同的脚本,我会收到以下错误:Unable to start JVM at native/common/jp_env.cpp:78。任何想法为什么会这样?
猜你喜欢
  • 2018-10-01
  • 2020-06-29
  • 2017-01-26
  • 2021-08-01
  • 2014-10-23
  • 1970-01-01
  • 2015-03-16
  • 2021-01-20
  • 2016-04-05
相关资源
最近更新 更多