Metadata-Version: 2.4
Name: tmjlite
Version: 0.2.8
Summary: TMJLite embedded SQL database driver — git-native branches, single-file .tmjp, native engine included
Home-page: https://tmjlite.com.br
Author: TMJ Sistemas de Informação
License: MIT
Project-URL: Homepage, https://tmjlite.com.br
Project-URL: Documentation, https://tmjlite.com.br/manual.html
Project-URL: Repository, https://github.com/TMJacometti/TMJPlatform
Project-URL: Changelog, https://github.com/TMJacometti/TMJPlatform/blob/main/CHANGELOG.md
Keywords: database,embedded,sql,tmjlite,branches
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Rust
Classifier: Topic :: Database
Classifier: Topic :: Database :: Database Engines/Servers
Classifier: Operating System :: MacOS
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Microsoft :: Windows
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Dynamic: home-page
Dynamic: requires-python

# tmjlite (Python)

Driver Python do **TMJLite** — banco de dados SQL embarcado, em um único
arquivo `.tmjp`, com **branches de dados git-native**. O motor nativo (Rust)
já vem dentro do wheel: nada para instalar além do `pip`.

```bash
pip install tmjlite
```

Plataformas: macOS (Apple Silicon), Linux x86-64, Windows x86-64 · Python ≥ 3.8.

```python
import tmjlite

db = tmjlite.connect("app.tmjp")
db.execute("CREATE TABLE users (id PK, name TEXT, age INT);")
db.execute("INSERT INTO users (name, age) VALUES ('Alice', 30);")
for row in db.query("SELECT name, age FROM users WHERE age > 18;"):
    print(row["name"], row["age"])

with db.transaction():
    db.execute("INSERT INTO users (name, age) VALUES ('Bob', 25);")
db.close()
```

Branches — trabalhe numa cópia lógica e faça merge no arquivo principal,
enquanto a aplicação continua enxergando o banco intocado:

```python
b = tmjlite.open_branch("app.tmjp", "importacao")
b.execute("INSERT INTO users (name, age) VALUES ('Carol', 41);")
b.seal("primeira leva", author="thiago")   # commit na branch
applied = b.commit()                        # merge no app.tmjp
print(f"{applied} linha(s) aplicadas")
```

Vários processos ao mesmo tempo? `tmjlite.connect_shadow(path)` dá a cada
worker uma sessão própria; `commit()` mergeia por chave primária.

- Manual: <https://tmjlite.com.br/manual.html>
- Branches e concorrência (guia + FAQ): <https://tmjlite.com.br/branches.html>
- Exemplo completo (sistema de cadastro): <https://tmjlite.com.br/examples.html>
- Changelog: <https://github.com/TMJacometti/TMJPlatform/blob/main/CHANGELOG.md>

Licença MIT · TMJ Sistemas de Informação.
