| = Solr JDBC - Python/Jython |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| Solr's JDBC driver supports Python and Jython. |
| |
| == Python |
| |
| Python supports accessing JDBC using the https://pypi.python.org/pypi/JayDeBeApi/[JayDeBeApi] library. The CLASSPATH variable must be configured to contain the solr-solrj jar and the supporting solrj-lib jars. |
| |
| |
| === JayDeBeApi |
| |
| .run.sh |
| [source,bash] |
| ---- |
| #!/usr/bin/env bash |
| # Java must already be installed |
| |
| pip install JayDeBeApi |
| |
| export CLASSPATH="$(echo $(ls /opt/solr/dist/solr-solrj* /opt/solr/dist/solrj-lib/*) | tr ' ' ':')" |
| |
| python solr_jaydebeapi.py |
| ---- |
| |
| .solr_jaydebeapi.py |
| [source,python] |
| ---- |
| #!/usr/bin/env python |
| |
| # https://pypi.python.org/pypi/JayDeBeApi/ |
| |
| import jaydebeapi |
| import sys |
| if __name__ == '__main__': |
| jdbc_url = "jdbc:solr://localhost: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 supports accessing JDBC natively with Java interfaces or with the zxJDBC library. The CLASSPATH variable must be configured to contain the solr-solrj jar and the supporting solrj-lib jars. |
| |
| .run.sh |
| [source,bash] |
| ---- |
| #!/usr/bin/env bash |
| # Java and Jython must already be installed |
| |
| export CLASSPATH="$(echo $(ls /opt/solr/dist/solr-solrj* /opt/solr/dist/solrj-lib/*) | tr ' ' ':')" |
| |
| jython [solr_java_native.py | solr_zxjdbc.py] |
| ---- |
| |
| === Java Native |
| |
| .solr_java_native.py |
| [source,python] |
| ---- |
| #!/usr/bin/env jython |
| |
| # http://www.jython.org/jythonbook/en/1.0/DatabasesAndJython.html |
| # 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://localhost: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 |
| [source,python] |
| ---- |
| #!/usr/bin/env jython |
| |
| # http://www.jython.org/jythonbook/en/1.0/DatabasesAndJython.html |
| # 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://localhost: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) |
| ---- |