Skip to main content

WaveDB

How to use WaveDB, a simple sqlite3 database server that ships with Wave.

# Before you run this example, start WaveDB (`wavedb`).# By default, WaveDB listens on port 10100.## To run this example, execute `python db.py`## If your WaveDB instance is configured differently, you might want to set#   the following environment variables accordingly:# H2O_WAVEDB_ADDRESS - the ip:port of the database server# H2O_WAVEDB_ACCESS_KEY_ID - the API access key ID# H2O_WAVEDB_ACCESS_KEY_SECRET - the API access key secret
import asynciofrom h2o_wave import connect

async def main():    # Create a database connection    connection = connect()
    # Access the 'employees' database.    # A new database is created automatically if it does not exist.    db = connection["employees"]
    # Execute some statements.    await db.exec("drop table if exists employee")    await db.exec("create table employee(empid integer, name text, title text)")
    # Execute a statement and handle errors.    results, err = await db.exec("insert into employee values(?, ?, ?)", 101, 'Jeffrey Lebowski', 'Slacker')    if err:        raise ValueError(err)
    # Execute many statements.    insert_employee = "insert into employee values(?, ?, ?)"    await db.exec_many(        (insert_employee, 102, 'Walter Sobchak', 'Veteran'),        (insert_employee, 103, 'Donny Kerabatsos', 'Sidekick'),        (insert_employee, 104, 'Jesus Quintana', 'Bowler'),        (insert_employee, 105, 'Uli Kunkel', 'Nihilist'),    )
    # Execute many statements as a transaction.    await db.exec_atomic(        (insert_employee, 106, 'Brandt', 'Butler'),        (insert_employee, 107, 'Maude Lebowski', 'Artist'),        (insert_employee, 108, 'Franz', 'Nihilist'),        (insert_employee, 109, 'Kieffer', 'Nihilist'),    )
    # Read records.    rows, err = await db.exec("select * from employee")    if err:        raise ValueError(err)
    print(rows)
    # Prints:    #  [    #     [101, 'Jeffrey Lebowski', 'Slacker'],    #     [102, 'Walter Sobchak', 'Veteran'],    #     [103, 'Donny Kerabatsos', 'Sidekick'],    #     [104, 'Jesus Quintana', 'Bowler'],    #     [105, 'Uli Kunkel', 'Nihilist'],    #     [106, 'Brandt', 'Butler'],    #     [107, 'Maude Lebowski', 'Artist'],    #     [108, 'Franz', 'Nihilist'],    #     [109, 'Kieffer', 'Nihilist']    # ]
    # Clean up.    await db.exec("drop table employee")
    # Drop the database entirely. Warning: A database is irrecoverable once dropped.    await db.drop()
    # Close connection.    await connection.close()

loop = asyncio.new_event_loop()asyncio.set_event_loop(loop)loop.run_until_complete(main())