{"id":15962392,"url":"https://github.com/ar4ikov/sqlextendedobjects","last_synced_at":"2026-05-05T11:33:01.467Z","repository":{"id":57470548,"uuid":"173549867","full_name":"Ar4ikov/SQLExtendedObjects","owner":"Ar4ikov","description":"Утилиты и классы для облегченной и удобной работы с SQlite таблицами и SQL в целом.","archived":false,"fork":false,"pushed_at":"2020-03-02T18:26:20.000Z","size":9,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-14T12:18:20.700Z","etag":null,"topics":["database","db","oop","opensource","pytnon","sql","sqlite","sqlite3","tables"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ar4ikov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-03T08:32:28.000Z","updated_at":"2021-11-03T19:37:34.000Z","dependencies_parsed_at":"2022-09-26T17:31:39.778Z","dependency_job_id":null,"html_url":"https://github.com/Ar4ikov/SQLExtendedObjects","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ar4ikov%2FSQLExtendedObjects","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ar4ikov%2FSQLExtendedObjects/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ar4ikov%2FSQLExtendedObjects/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ar4ikov%2FSQLExtendedObjects/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ar4ikov","download_url":"https://codeload.github.com/Ar4ikov/SQLExtendedObjects/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247176145,"owners_count":20896420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["database","db","oop","opensource","pytnon","sql","sqlite","sqlite3","tables"],"created_at":"2024-10-07T16:03:29.467Z","updated_at":"2026-05-05T11:33:01.422Z","avatar_url":"https://github.com/Ar4ikov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SQL Extended Objects\n\n- Q: А зачем?\n- A: А затем. Вместо обычного получения списка-матрицы с рядами в таблице, можно\nполучить классы и обращаться к атрибутам класса, как к колонкам в таблице SQL.\n---\n- Q: Полезно ли?\n- A: Да, полезно и удобно.\n---\n- Q: А что по багам? Тесты хоть есть?\n- A: Да, и юнит, и даже интеграционные (в мыслях у разраба).\n---\n\n### Установка\n```console\nroot@Ar4ikov:~$ pip install SQLExtendedObjects\n```\n\n### Коротко о функционале\n\n- Создание класса, который будет отвечать за ряд в таблице.\n```python\n\nfrom sql_extended_objects import ExtObject\n\nclass User(ExtObject):\n    def __init__(self, **data):\n        super().__init__(**data)\n    \n    def my_method(self):\n        pass\n        \n    def other_method(self):\n        pass\n        \n```\n\n- Подключение к SQLite3 БД и получение из таблицы\n```python\nfrom sql_extended_objects import ExtRequests\n\ndatabase = ExtRequests(\"database.db\")\n\nusers = database.select_all(\"my_table\", User, where=\"`id` = 1\")\n\nif users:\n    user = users[0]\n\n# Обращение к атрибутам класса\n# Таблица вида: \n# -------------------\n# id | first_name | last_name | age | nickname\n\nprint(user.first_name)\n# Out: \"Nikita\"\n\nprint(user.last_name)\n# Out: \"Archikov\"\n\nprint(user.id)\n# Out: 1\n\nprint(user.pk)  # -\u003e PRIMARY KEY нашей таблицы. Если нет - \"id\"\n# Out: \"id\"\n\n# Изменеие атрибута и автоматическая синхронизация с таблицей\nuser[\"age\"] = 17\n\n# Удаление класса и удаление ряда из таблицы\nuser.remove()\n\n# Очистка атрибутов в экземляре\nuser.reset()\n\n# Сравнение экземпляров по PRIMARY KEY\n\nprint(user == user)\n# Out: True\n\nprint(user \u003c= user)\n# Out: True\n\nprint(user \u003e user)\n# Out: False\n\n```\n\n- Стандартные SQL-запросы\n```python\nfrom sql_extended_objects import ExtRequests\n\ndatabase = ExtRequests(\"database.db\")\n\ndatabase.execute(\"\"\"SELECT * FROM `my_table` WHERE `id` = 1;\"\"\")\n\n# Запрос с авто-коммитом\ndatabase.commit(\"\"\"UPDATE `my_table` SET `age` = 17 WHERE `id` = 1;\"\"\")\n\n```\n\n- Парочка встроенных методов для помощи в поиске из классов\n```python\nfrom sql_extended_objects import ExtRequests, ExtObject\n\n\nclass User(ExtObject):\n    def __init__(self, **data):\n        super().__init__(**data)\n    \n    def my_method(self):\n        pass\n        \n    def other_method(self):\n        pass\n        \n\n\ndatabase = ExtRequests(\"database.db\")\n\n# Получение класса из списка\nusers = database.select_all(\"my_table\", User)\nthis_user = database.utils.get(users, id=1)\n\n# Обновление атрибутов у всех классов\nusers = database.utils.update_all(users, age=17)\n\n# Удаление всех классов из списка и из таблицы\ndatabase.utils.remove_all(users)\n\n```\n\nНу, собственно, всё. Если у вас есть какие-то пожелания - смело прошу в `Pull-Requests` писать.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far4ikov%2Fsqlextendedobjects","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Far4ikov%2Fsqlextendedobjects","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far4ikov%2Fsqlextendedobjects/lists"}