blob: c6e5dbd4e4b61cf2f1dda742bb2bc7007b8dad6b [file]
# 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.
# RECIPE STARTS HERE
#: After verifying the basic driver functionality, we can use the
#: ``adbc_driver_manager`` Python package's built-in dbapi implementation
#: to expose a ready-to-go Pythonic database API. This is also useful for
#: high-level testing!
#:
#: First, we'll import pathlib for a few path calculations and the
#: ``adbc_driver_manager``'s ``dbapi`` module:
from pathlib import Path
from adbc_driver_manager import dbapi
#: Next, we'll define a ``connect()`` function that wraps ``dbapi.connect()``
#: with the location of the shared library we built using ``cmake`` in the previous
#: section. For the purposes of our tutorial, this will be in the CMake ``build/``
#: directory.
def connect(uri: str):
build_dir = Path(__file__).parent / "build"
for lib in [
"libdriver_example.dylib",
"libdriver_example.so",
"driver_example.dll",
]:
driver_lib = build_dir / lib
if driver_lib.exists():
return dbapi.connect(
driver=str(driver_lib.resolve()), db_kwargs={"uri": uri}
)
# Try to find it on the dynamic loader path
return dbapi.connect(driver="driver_example", db_kwargs={"uri": uri})
#: Next, we can give our driver a go! The two pieces we implemented in the driver
#: were the "bulk ingest" feature and "select all from", so let's see if it works!
if __name__ == "__main__":
import os
import pyarrow
with connect(uri=Path(__file__).parent.as_uri()) as con:
data = pyarrow.table({"col": [1, 2, 3]})
with con.cursor() as cur:
cur.adbc_ingest("example.arrows", data, mode="create")
with con.cursor() as cur:
cur.execute("SELECT * FROM example.arrows")
print(cur.fetchall())
# Output: [(1,), (2,), (3,)]
os.unlink(Path(__file__).parent / "example.arrows")