rdflib extension adding SQLAlchemy as an AbstractSQLStore back-end store
Project description
RDFLib-SQLAlchemy
A SQLAlchemy-backed, formula-aware RDFLib Store. It stores its triples in the following partitions:
- Asserted non rdf:type statements.
- Asserted rdf:type statements (in a table which models Class membership). The motivation for this partition is primarily query speed and scalability as most graphs will always have more rdf:type statements than others.
- All Quoted statements.
In addition, it persists namespace mappings in a separate table. Table names are prefixed kb_{identifier_hash}
, where identifier_hash
is the first ten characters of the SHA1 hash of the given identifier.
Back-end persistence
Back-end persistence is provided by SQLAlchemy.
Tested dialects are:
- SQLite, using the built-in Python driver
- MySQL, using the MySQLdb-python driver or, for Python 3, mysql-connector
- PostgreSQL, using the psycopg2 driver or the pg8000 driver.
pysqlite: https://pypi.python.org/pypi/pysqlite
MySQLdb-python: https://pypi.python.org/pypi/MySQL-python
mysql-connector: http://dev.mysql.com/doc/connector-python/en/connector-python.html
psycopg2: https://pypi.python.org/pypi/psycopg2
pg8000: https://pypi.python.org/pypi/pg8000
Development
Note: Currently, rdflib-sqlalchemy is in maintenance mode. That means the current maintainer (@mwatts15) will do what he can to keep the package working for existing use-cases, but new features will not be added and newer versions of SQLAlchemy will not be supported. If you have an interest in further development of rdflib-sqlalchemy, please get in touch with @mwatts15 or core RDFLib project developers.
Github repository: https://github.com/RDFLib/rdflib-sqlalchemy
Continuous integration: https://travis-ci.org/RDFLib/rdflib-sqlalchemy/
An illustrative unit test:
import unittest
from rdflib import plugin, Graph, Literal, URIRef
from rdflib.store import Store
class SQLASQLiteGraphTestCase(unittest.TestCase):
ident = URIRef("rdflib_test")
uri = Literal("sqlite://")
def setUp(self):
self.graph = Graph("SQLAlchemy", identifier=self.ident)
self.graph.open(self.uri, create=True)
def tearDown(self):
self.graph.destroy(self.uri)
try:
self.graph.close()
except:
pass
def test01(self):
self.assert_(self.graph is not None)
print(self.graph)
if __name__ == '__main__':
unittest.main()
Running the tests
pytest
is supported as a test runner, typically called via tox
. Select the
SQL back-end by setting a DB
environment variable. Select the database
connection by setting the DBURI
variable. With tox
, you can also specify
the Python version.
Using pytest::
DB='pgsql' DBURI='postgresql+psycopg2://user:password@host/dbname' pytest
Using tox::
DB='pgsql' DBURI='postgresql+psycopg2://user:password@host/dbname' tox -e py310
DB variants are 'pgsql', 'mysql' and 'sqlite'. Except in the case of SQLite, you'll need to create the database independently, before execution of the test.
Sample DBURI values::
dburi = Literal("mysql://username:password@hostname:port/database-name?other-parameter")
dburi = Literal("mysql+mysqldb://user:password@hostname:port/database?charset=utf8")
dburi = Literal('postgresql+psycopg2://user:password@hostname:port/database')
dburi = Literal('postgresql+pg8000://user:password@hostname:port/database')
dburi = Literal('sqlite:////absolute/path/to/foo.db')
dburi = Literal("sqlite:///%(here)s/development.sqlite" % {"here": os.getcwd()})
dburi = Literal('sqlite://') # In-memory
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for brickschema_rdflib_sqlalchemy-0.6.0a0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a7188d18962ebd2ad4484b990a3cd7128e9abd7b7a42dfd4c1bc4d969611f86 |
|
MD5 | 31d8a0789019cfb1dfdc33f440ede6d0 |
|
BLAKE2b-256 | 37c52aacc2dda3eb6afd09126bd02848b38b67e4a22c72b75cf535cdf96449a2 |
Hashes for brickschema_rdflib_sqlalchemy-0.6.0a0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 61085171a5b50100485037494b6401613f48c1217532f6fd576a27a2fd2b105d |
|
MD5 | 3d40b08178fe2db2107522a8306a898b |
|
BLAKE2b-256 | 316a4d3323a6e5cb0c7000616ef22ea731bb9a39ff35463e68ff2446c9641a2d |