搭配 Python/Jython 的 JDBC
Solr 的 JDBC 驅動程式支援 Python 和 Jython。
Python
Python 支援使用 JayDeBeApi 程式庫存取 JDBC。必須設定 CLASSPATH 變數,使其包含 solr-solrj
jar 和支援的 solrj-lib
jar。
JayDeBeApi
run.sh
#!/usr/bin/env bash
# Java must already be installed
pip install JayDeBeApi
export CLASSPATH="/opt/solr/server/lib/ext/*:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib/*"
python solr_jaydebeapi.py
solr_jaydebeapi.py
#!/usr/bin/env python
# https://pypi.python.org/pypi/JayDeBeApi/
import jaydebeapi
import sys
if __name__ == '__main__':
jdbc_url = "jdbc:solr://127.0.0.1:9983?collection=test"
driverName = "org.apache.solr.client.solrj.io.sql.DriverImpl"
statement = "select fielda, fieldb, fieldc, fieldd_s, fielde_i from test limit 10"
conn = jaydebeapi.connect(driverName, jdbc_url)
curs = conn.cursor()
curs.execute(statement)
print(curs.fetchall())
conn.close()
sys.exit(0)
Jython
Jython 支援使用 Java 介面或 zxJDBC 程式庫原生存取 JDBC。必須設定 CLASSPATH 變數,使其包含 solr-solrj jar 和支援的 solrj-lib jar。
run.sh
#!/usr/bin/env bash
# Java and Jython must already be installed
export CLASSPATH="/opt/solr/server/lib/ext/*:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib/*"
jython [solr_java_native.py | solr_zxjdbc.py]
Java 原生
solr_java_native.py
#!/usr/bin/env jython
# https://jython.readthedocs.io/en/latest/DatabasesAndJython/
# https://wiki.python.org/jython/DatabaseExamples#SQLite_using_JDBC
import sys
from java.lang import Class
from java.sql import DriverManager, SQLException
if __name__ == '__main__':
jdbc_url = "jdbc:solr://127.0.0.1:9983?collection=test"
driverName = "org.apache.solr.client.solrj.io.sql.DriverImpl"
statement = "select fielda, fieldb, fieldc, fieldd_s, fielde_i from test limit 10"
dbConn = DriverManager.getConnection(jdbc_url)
stmt = dbConn.createStatement()
resultSet = stmt.executeQuery(statement)
while resultSet.next():
print(resultSet.getString("fielda"))
resultSet.close()
stmt.close()
dbConn.close()
sys.exit(0)
zxJDBC
solr_zxjdbc.py
#!/usr/bin/env jython
# https://jython.readthedocs.io/en/latest/DatabasesAndJython/
# https://wiki.python.org/jython/DatabaseExamples#SQLite_using_ziclix
import sys
from com.ziclix.python.sql import zxJDBC
if __name__ == '__main__':
jdbc_url = "jdbc:solr://127.0.0.1:9983?collection=test"
driverName = "org.apache.solr.client.solrj.io.sql.DriverImpl"
statement = "select fielda, fieldb, fieldc, fieldd_s, fielde_i from test limit 10"
with zxJDBC.connect(jdbc_url, None, None, driverName) as conn:
with conn:
with conn.cursor() as c:
c.execute(statement)
print(c.fetchall())
sys.exit(0)