Metadata-Version: 2.4
Name: dialectorm-m1kad0
Version: 0.1.1
Summary: Leichtgewichtiges, dialekt-fähiges Mini-ORM für SQLite, PostgreSQL und MySQL
License-Expression: MIT
Requires-Python: >=3.10
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == 'dev'
Provides-Extra: mysql
Requires-Dist: mysql-connector-python>=8.0; extra == 'mysql'
Provides-Extra: postgres
Requires-Dist: psycopg2-binary>=2.9; extra == 'postgres'
Description-Content-Type: text/markdown

# pyorm

Leichtgewichtiges Mini-ORM für SQLite, PostgreSQL und MySQL — kein SQLAlchemy,
keine Migrationen, kein globaler Connection-State. `Database`-Instanzen werden
explizit erzeugt und an jeden Model-Aufruf durchgereicht.

## Installation

```bash
pip install -e .[dev]          # nur SQLite (stdlib)
pip install -e .[dev,postgres] # + psycopg2
pip install -e .[dev,mysql]    # + mysql-connector-python
```

## Beispiel

```python
from pyorm import Database, BaseModel

class User(BaseModel):
    __table__ = "users"
    __primary_key__ = "id"
    __slots__ = ("id", "name", "email", "_db")

db = Database.sqlite(":memory:")
db.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)")

user = User.create(db, name="Ada", email="ada@example.com")
found = User.get(db, id=user.id)

with db.transaction():
    found.update(name="Ada Lovelace")
```

Für Postgres/MySQL statt `Database.sqlite(...)`:

```python
db = Database.postgres(host="localhost", dbname="app", user="app", password="...")
db = Database.mysql(host="localhost", database="app", user="app", password="...")
```

## Tests

```bash
pytest                                  # SQLite-Tests laufen immer
PYORM_TEST_PG_DSN="host=localhost dbname=test user=test password=test" pytest
PYORM_TEST_MYSQL_DSN="host=localhost;database=test;user=test;password=test" pytest
```

Ohne gesetzte DSN-Umgebungsvariable werden die Postgres-/MySQL-Tests übersprungen.
