# tableschema-sql-py
[![Travis](https://img.shields.io/travis/frictionlessdata/tableschema-sql-py/master.svg)](https://travis-ci.org/frictionlessdata/tableschema-sql-py)
[![Coveralls](http://img.shields.io/coveralls/frictionlessdata/tableschema-sql-py/master.svg)](https://coveralls.io/r/frictionlessdata/tableschema-sql-py?branch=master)
[![PyPi](https://img.shields.io/pypi/v/tableschema-sql.svg)](https://pypi.python.org/pypi/tableschema-sql)
[![Github](https://img.shields.io/badge/github-master-brightgreen)](https://github.com/frictionlessdata/tableschema-sql-py)
[![Gitter](https://img.shields.io/gitter/room/frictionlessdata/chat.svg)](https://gitter.im/frictionlessdata/chat)
Generate and load SQL tables based on [Table Schema](http://specs.frictionlessdata.io/table-schema/) descriptors.
## Features
- implements `tableschema.Storage` interface
- provides additional features like indexes and updating
## Contents
<!--TOC-->
- [Getting Started](#getting-started)
- [Installation](#installation)
- [Documentation](#documentation)
- [API Reference](#api-reference)
- [`Storage`](#storage)
- [Contributing](#contributing)
- [Changelog](#changelog)
<!--TOC-->
## Getting Started
### Installation
The package use semantic versioning. It means that major versions could include breaking changes. It's highly recommended to specify `package` version range in your `setup/requirements` file e.g. `package>=1.0,<2.0`.
```bash
pip install tableschema-sql
```
## Documentation
```python
from datapackage import Package
from tableschema import Table
from sqlalchemy import create_engine
# Create sqlalchemy engine
engine = create_engine('sqlite://')
# Save package to SQL
package = Package('datapackage.json')
package.save(storage='sql', engine=engine)
# Load package from SQL
package = Package(storage='sql', engine=engine)
package.resources
```
## API Reference
### `Storage`
```python
Storage(self, engine, dbschema=None, prefix='', reflect_only=None, autoincrement=None)
```
SQL storage
Package implements
[Tabular Storage](https://github.com/frictionlessdata/tableschema-py#storage)
interface (see full documentation on the link):
![Storage](https://i.imgur.com/RQgrxqp.png)
> Only additional API is documented
__Arguments__
- __engine (object)__: `sqlalchemy` engine
- __dbschema (str)__: name of database schema
- __prefix (str)__: prefix for all buckets
- __reflect_only (callable)__:
a boolean predicate to filter the list of table names when reflecting
- __autoincrement (str/dict)__:
add autoincrement column at the beginning.
- if a string it's an autoincrement column name
- if a dict it's an autoincrements mapping with column
names indexed by bucket names, for example,
`{'bucket1': 'id', 'bucket2': 'other_id}`
#### `storage.create`
```python
storage.create(self, bucket, descriptor, force=False, indexes_fields=None)
```
Create bucket
__Arguments__
- __indexes_fields (str[])__:
list of tuples containing field names, or list of such lists
#### `storage.write`
```python
storage.write(self, bucket, rows, keyed=False, as_generator=False, update_keys=None, buffer_size=1000, use_bloom_filter=True)
```
Write to bucket
__Arguments__
- __keyed (bool)__:
accept keyed rows
- __as_generator (bool)__:
returns generator to provide writing control to the client
- __update_keys (str[])__:
update instead of inserting if key values match existent rows
- __buffer_size (int=1000)__:
maximum number of rows to try and write to the db in one batch
- __use_bloom_filter (bool=True)__:
should we use a bloom filter to optimize DB update performance
(in exchange for some setup time)
## Contributing
> The project follows the [Open Knowledge International coding standards](https://github.com/okfn/coding-standards).
Recommended way to get started is to create and activate a project virtual environment.
To install package and development dependencies into active environment:
```bash
$ make install
```
To run tests with linting and coverage:
```bash
$ make test
```
## Changelog
Here described only breaking and the most important changes. The full changelog and documentation for all released versions could be found in nicely formatted [commit history](https://github.com/frictionlessdata/tableschema-sql-py/commits/master).
#### v1.3
- Implemented constraints loading to a database
#### v1.2
- Add option to configure buffer size, bloom filter use (#77)
#### v1.1
- Added support for the `autoincrement` parameter to be a mapping
- Fixed autoincrement support for SQLite and MySQL
#### v1.0
- Initial driver implementation.
Raw data
{
"_id": null,
"home_page": "https://github.com/frictionlessdata/tableschema-sql-py",
"name": "tableschema-sql",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "frictionless data",
"author": "Open Knowledge Foundation",
"author_email": "info@okfn.org",
"download_url": "https://files.pythonhosted.org/packages/f2/45/93c77807b1f5acd375de6ee031c0be7be537e90bfdf625ddd9e0ed355e97/tableschema-sql-2.0.1.tar.gz",
"platform": null,
"description": "# tableschema-sql-py\n\n[![Travis](https://img.shields.io/travis/frictionlessdata/tableschema-sql-py/master.svg)](https://travis-ci.org/frictionlessdata/tableschema-sql-py)\n[![Coveralls](http://img.shields.io/coveralls/frictionlessdata/tableschema-sql-py/master.svg)](https://coveralls.io/r/frictionlessdata/tableschema-sql-py?branch=master)\n[![PyPi](https://img.shields.io/pypi/v/tableschema-sql.svg)](https://pypi.python.org/pypi/tableschema-sql)\n[![Github](https://img.shields.io/badge/github-master-brightgreen)](https://github.com/frictionlessdata/tableschema-sql-py)\n[![Gitter](https://img.shields.io/gitter/room/frictionlessdata/chat.svg)](https://gitter.im/frictionlessdata/chat)\n\nGenerate and load SQL tables based on [Table Schema](http://specs.frictionlessdata.io/table-schema/) descriptors.\n\n## Features\n\n- implements `tableschema.Storage` interface\n- provides additional features like indexes and updating\n\n## Contents\n\n<!--TOC-->\n\n - [Getting Started](#getting-started)\n - [Installation](#installation)\n - [Documentation](#documentation)\n - [API Reference](#api-reference)\n - [`Storage`](#storage)\n - [Contributing](#contributing)\n - [Changelog](#changelog)\n\n<!--TOC-->\n\n## Getting Started\n\n### Installation\n\nThe package use semantic versioning. It means that major versions could include breaking changes. It's highly recommended to specify `package` version range in your `setup/requirements` file e.g. `package>=1.0,<2.0`.\n\n```bash\npip install tableschema-sql\n```\n\n## Documentation\n\n```python\nfrom datapackage import Package \nfrom tableschema import Table\nfrom sqlalchemy import create_engine\n\n# Create sqlalchemy engine\nengine = create_engine('sqlite://')\n\n# Save package to SQL\npackage = Package('datapackage.json')\npackage.save(storage='sql', engine=engine)\n\n# Load package from SQL\npackage = Package(storage='sql', engine=engine)\npackage.resources\n```\n\n## API Reference\n\n### `Storage`\n```python\nStorage(self, engine, dbschema=None, prefix='', reflect_only=None, autoincrement=None)\n```\nSQL storage\n\nPackage implements\n[Tabular Storage](https://github.com/frictionlessdata/tableschema-py#storage)\ninterface (see full documentation on the link):\n\n![Storage](https://i.imgur.com/RQgrxqp.png)\n\n> Only additional API is documented\n\n__Arguments__\n- __engine (object)__: `sqlalchemy` engine\n- __dbschema (str)__: name of database schema\n- __prefix (str)__: prefix for all buckets\n- __reflect_only (callable)__:\n a boolean predicate to filter the list of table names when reflecting\n- __autoincrement (str/dict)__:\n add autoincrement column at the beginning.\n - if a string it's an autoincrement column name\n - if a dict it's an autoincrements mapping with column\n names indexed by bucket names, for example,\n `{'bucket1': 'id', 'bucket2': 'other_id}`\n\n\n#### `storage.create`\n```python\nstorage.create(self, bucket, descriptor, force=False, indexes_fields=None)\n```\nCreate bucket\n\n__Arguments__\n- __indexes_fields (str[])__:\n list of tuples containing field names, or list of such lists\n\n\n#### `storage.write`\n```python\nstorage.write(self, bucket, rows, keyed=False, as_generator=False, update_keys=None, buffer_size=1000, use_bloom_filter=True)\n```\nWrite to bucket\n\n__Arguments__\n- __keyed (bool)__:\n accept keyed rows\n- __as_generator (bool)__:\n returns generator to provide writing control to the client\n- __update_keys (str[])__:\n update instead of inserting if key values match existent rows\n- __buffer_size (int=1000)__:\n maximum number of rows to try and write to the db in one batch\n- __use_bloom_filter (bool=True)__:\n should we use a bloom filter to optimize DB update performance\n (in exchange for some setup time)\n\n\n## Contributing\n\n> The project follows the [Open Knowledge International coding standards](https://github.com/okfn/coding-standards).\n\nRecommended way to get started is to create and activate a project virtual environment.\nTo install package and development dependencies into active environment:\n\n```bash\n$ make install\n```\n\nTo run tests with linting and coverage:\n\n```bash\n$ make test\n```\n\n## Changelog\n\nHere described only breaking and the most important changes. The full changelog and documentation for all released versions could be found in nicely formatted [commit history](https://github.com/frictionlessdata/tableschema-sql-py/commits/master).\n\n#### v1.3\n\n- Implemented constraints loading to a database\n\n#### v1.2\n\n- Add option to configure buffer size, bloom filter use (#77)\n\n#### v1.1\n\n- Added support for the `autoincrement` parameter to be a mapping\n- Fixed autoincrement support for SQLite and MySQL\n\n#### v1.0\n\n- Initial driver implementation.\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Generate SQL tables, load and extract data, based on JSON Table Schema descriptors.",
"version": "2.0.1",
"project_urls": {
"Homepage": "https://github.com/frictionlessdata/tableschema-sql-py"
},
"split_keywords": [
"frictionless",
"data"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f2205a8bf56cc40f102e2ff3ddeced440e81b83abfa4b49a9308305ec52e8764",
"md5": "11d560899b0e9574025f1dc2382c9cf2",
"sha256": "cf2da48bef2e7ad7d912cdcc0992c32d74a66cc900bf32809cfc89b647acd5d3"
},
"downloads": -1,
"filename": "tableschema_sql-2.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "11d560899b0e9574025f1dc2382c9cf2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 12380,
"upload_time": "2023-07-19T17:46:54",
"upload_time_iso_8601": "2023-07-19T17:46:54.650939Z",
"url": "https://files.pythonhosted.org/packages/f2/20/5a8bf56cc40f102e2ff3ddeced440e81b83abfa4b49a9308305ec52e8764/tableschema_sql-2.0.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f24593c77807b1f5acd375de6ee031c0be7be537e90bfdf625ddd9e0ed355e97",
"md5": "3fe6d4e301d125f96897441b1f3628e6",
"sha256": "791140479b8f1acd75f381a96aa52b6d15edde1153531efb3451140fa1d88e4a"
},
"downloads": -1,
"filename": "tableschema-sql-2.0.1.tar.gz",
"has_sig": false,
"md5_digest": "3fe6d4e301d125f96897441b1f3628e6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13597,
"upload_time": "2023-07-19T17:46:56",
"upload_time_iso_8601": "2023-07-19T17:46:56.234895Z",
"url": "https://files.pythonhosted.org/packages/f2/45/93c77807b1f5acd375de6ee031c0be7be537e90bfdf625ddd9e0ed355e97/tableschema-sql-2.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-19 17:46:56",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "frictionlessdata",
"github_project": "tableschema-sql-py",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "tableschema-sql"
}