{"id":20547401,"url":"https://github.com/ggonnella/attrtables","last_synced_at":"2026-03-05T18:04:21.948Z","repository":{"id":45391867,"uuid":"480911207","full_name":"ggonnella/attrtables","owner":"ggonnella","description":"System for storing, a dynamic set of entity attributes in a database","archived":false,"fork":false,"pushed_at":"2025-02-20T02:02:03.000Z","size":58,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-25T04:24:43.795Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ggonnella.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.txt","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-04-12T17:34:19.000Z","updated_at":"2024-10-07T07:09:55.000Z","dependencies_parsed_at":"2025-04-14T10:35:37.615Z","dependency_job_id":"0f8ef587-3cb8-4dd4-8c84-be93ef6fb21a","html_url":"https://github.com/ggonnella/attrtables","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/ggonnella/attrtables","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggonnella%2Fattrtables","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggonnella%2Fattrtables/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggonnella%2Fattrtables/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggonnella%2Fattrtables/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ggonnella","download_url":"https://codeload.github.com/ggonnella/attrtables/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggonnella%2Fattrtables/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30141313,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T16:58:46.102Z","status":"ssl_error","status_checked_at":"2026-03-05T16:58:45.706Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T02:08:07.225Z","updated_at":"2026-03-05T18:04:21.917Z","avatar_url":"https://github.com/ggonnella.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AttrTables\n\nAttrTables is a library for storing attributes of entities in a database,\nwhere the entities are rows and the attributes are columns in an automatically\nmanaged set of tables.\n\n## Basic concepts\n\nEach _entity_ (identified by an unique ID) can have as many _attributes_ as\ndesired. These consist in one or multiple values, each stored in an independent\ndatabase column. New attributes can be added at any time.\n\nAlongside with the values, attributes can store a computation ID (which can\nrefer to an external table of computation metadata). Computation IDs can be\nstored for individual attributes and optionally also for groups of attributes.\n\nThe attribute columns are automatically spread among multiple database tables,\nso that the total number of columns does not exceed a given limit.\n\n## Comparison to entity-attribute-value\n\nAn alternative to the model implemented by AttrTables is the\nentity-attribute-value (EAV) model, in which there is a single table, where\nentities are rows and the attribute name and value are two columns.\n\nThe EAV model has some disadvantages, compared to AttrTables:\n- the values of a single attribute generally cannot be indexed\n- the values must be stored in a generic data type (such as blobs),\n  and the application must convert back and forth to the correct\n  datatype\n\n## Setup\nThe library is based on SqlAlchemy, which must be installed (see\n``requirements.txt``).\n\nFurthermore, a database must be setup. The connection to the database is done\nusing SqlAlchemy, and the connectable is passed to the library, as explained\nbelow.\n\n## Running the tests suite\n\nTo run the test suite, a database is needed, where the test tables can be\nstored. The user must create such database.\n\nThe database configuration is provided using a YAML configuration file\n\"config.yaml\", which shall be stored in the \"tests\" subdirectory (see as an\nexample \"tests/config.yaml\").\n\n## Usage\n\nThe usage of the library is explained in the\n [user manual](https://github.com/ggonnella/attrtables/blob/main/docs/usage.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fggonnella%2Fattrtables","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fggonnella%2Fattrtables","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fggonnella%2Fattrtables/lists"}