Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/proafxin/xin
A pydantic powered universal ORM wrapper for databases.
https://github.com/proafxin/xin
aiomysql asyncio asyncpg mongodb motor nosql orm pandas polars pre-commit pydantic python sqlalchemy sqlserver uv
Last synced: about 2 months ago
JSON representation
A pydantic powered universal ORM wrapper for databases.
- Host: GitHub
- URL: https://github.com/proafxin/xin
- Owner: proafxin
- License: apache-2.0
- Created: 2024-09-28T00:53:29.000Z (4 months ago)
- Default Branch: develop
- Last Pushed: 2024-12-09T22:19:06.000Z (about 2 months ago)
- Last Synced: 2024-12-09T23:23:43.669Z (about 2 months ago)
- Topics: aiomysql, asyncio, asyncpg, mongodb, motor, nosql, orm, pandas, polars, pre-commit, pydantic, python, sqlalchemy, sqlserver, uv
- Language: Python
- Homepage:
- Size: 118 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Xin
A pydantic powered universal ORM wrapper for databases.
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/proafxin/xin/develop.svg)](https://results.pre-commit.ci/latest/github/proafxin/xin/develop)
[![Build, Test and Publish](https://github.com/proafxin/xin/actions/workflows/cicd.yaml/badge.svg)](https://github.com/proafxin/xin/actions/workflows/cicd.yaml)
[![codecov](https://codecov.io/gh/proafxin/xin/graph/badge.svg?token=p2cOg8tQMb)](https://codecov.io/gh/proafxin/xin)
[![Documentation Status](https://readthedocs.org/projects/xin/badge/?version=latest)](https://xin.readthedocs.io/en/latest/?badge=latest)## Features
* Execute queries on a database.
* Read a database table as a dataframe.
* Write a dataframe to a database table (still under development).
* Flatten and normalize a dataframe with nested structure.
* Serialize a dataframe as a list of pydantic models.
* Deserialize a list of pydantic models as a dataframe.The primary backend for parsing dataframes is [polars](https://pola.rs/) due to it's superior [performance](https://pola.rs/_astro/perf-illustration.jHjw6PiD_165TDG.svg). `Xin` supports pandas dataframes as well, however, they are internally converted to polars dataframes first to not compromise performance.
The backend for interacting with SQL databases is [sqlalchemy](https://www.sqlalchemy.org/) because it supports async features and is the de-facto standard for communicating with SQL databases.
## Databases Supported
* MySQL
* PostgreSQL
* SQL Server
* Mongodb## Async Drivers Supported
`Xin` is async first. It means that if an async driver is available for a database dialect, it will leverage the async driver for better performance when applicable. SQL Server driver PyMSSQL does not have an async variation yet.
* [PyMongo](https://pymongo.readthedocs.io/en/stable/index.html) for Mongodb. Currently async support is in beta but since PyMongo is natively supporting async features, it's safer to use it rather than a third party package like [Motor](https://motor.readthedocs.io/en/stable/index.html).
* [Asyncpg](https://magicstack.github.io/asyncpg/current/) for PostgreSQL.
* [AioMySQL](https://aiomysql.readthedocs.io/en/stable/) for MySQL.## Plan for Future Database Support
* [Scylladb](https://www.scylladb.com/)
* [Apache Cassandra](https://cassandra.apache.org/_/index.html)