semvec/pypi-packages huggingface dataset:
pgfusion 0.0.10
An asyncpg wrapper with a simple api
License: MIT
Requires Python: >=3.10.4
Keywords: asyncio,asyncpg,postgres,python

# pgfusion

[![PyPI version](https://badge.fury.io/py/pgfusion.svg)](https://pypi.org/project/pgfusion/)

An asyncpg wrapper with a simple api.

The only dependency for **pgfusion** is
[asyncpg](https://github.com/MagicStack/asyncpg), and the api wrapper is very similar to
the api provieded by the [databases](https://github.com/encode/databases) package.

## Installation

```bash
$ pip install pgfusion
```

## Quickstart

```python
from pgfusion import Database

database = Database("postgresql://username:password@localhost:5432/postgres")
await database.connect()

# Execute a query
query = """
  create table high_scores (
    id uuid primary key default gen_random_uuid(),
    name varchar(100) not null,
    score integer not null
  )
"""
await database.execute(query)

# Execute many queries
query = "insert into high_scores (id, name, score) values (:id, :name, :score)"
values = [
  {"name": "George": "score": 43},
  {"name": "Jess": "score": 67},
  {"name": "Kevin": "score": 30}
]
await database.execute_many(query, values)

# Fetch many rows
query = select * from high_scores"
records = await database.fetch_many(query)
assert(len(records) == 3)

# Fetch a row
query = "select * from high_scores where name = :name"
values = {"name": "George"}
record = await database.fetch_one(query, values)
assert(record.score == 43)

# Fetch a value
query = "select name from high_scores where score = :score"
values = {"score": 30}
value = await database.fetch_value(query, values)
assert(value == "Kevin")

# Copy records to a table (via Postgres COPY)
await database.copy_records_to_table(
  "high_scores",
  records=[("Mav", 200), ("Connor", 134)],
  columns=["name", "score"]
)

# Work with individual connections
async with database.connection() as connection:
  ...

  # Create a transaction
  async with connection.transaction():
    ...

await database.disconnect()
```