I tested exposing an existing sqlite database I have through a web service which worked well. This is some details on my setup.
from docker compose file
ws4sql_sqlite: image: ghcr.io/proofrock/ws4sql:latest container_name: ws4sql_sqlite_container ports: # Map the container's default port (12321) to the host machine's port 12321 - "12321:12321" volumes: # Mount a local directory './data' to the container's '/data' volume - /stacks/ws_sqlite_data:/data restart: unless-stopped command: ["-db", "/data/students.yaml"] #command: ["--file", "/data/students.sqlite"]config file
$ cat ../ws_sqlite_data/students.yamldatabase: type: SQLITE # SQLITE or DUCKDB. If omitted, defaults to SQLITE inMemory: false # If type = SQLITE|DUCKDB. The db is a memory one? If omitted, defaults to false path: "/data/students.sqlite" # If type = SQLITE|DUCKDB. The db file path. id: students # If omitted and !inMemory, calculates it from the file name (if type = SQLITE|DUCKDB) disableWALMode: false # If type = SQLITE. Same as before, but moved here. readOnly: false # Same as before, but moved here.running container
$ docker compose psNAME IMAGE COMMAND SERVICE CREATED STATUS PORTS...ws4sql_sqlite_container ghcr.io/proofrock/ws4sql:latest "/ws4sql -db /data/s…" ws4sql_sqlite 10 minutes ago Up 2 minutes 0.0.0.0:12321->12321/tcp, [::]:12321->12321/tcpcontainer log
__ __ __ _ _______/ // / _________ _/ /| | /| / / ___/ // /_/ ___/ __ `/ /| |/ |/ (__ )__ __(__ ) /_/ / /|__/|__/____/ /_/ /____/\__, /_/ /_/ v0.17dev7+ sqlite v3.50.3+ duckdb v0.0.1- Parsing config file: /data/students.yaml + Serving database 'students' + Using WAL- Web Service listening on 0.0.0.0:12321example select
$ cat /tmp/students.json{ "transaction": [ { "query": "SELECT * FROM students" } ]}
$ curl -s -X POST -H "Content-Type: application/json" -d @/tmp/students.json http://localhost:12321/students | jq { "results": [ { "success": true, "resultHeaders": [ "id", "first_name", "last_name", "age" ], "resultSet": [ { "id": 101, "first_name": "John", "last_name": "Doe", "age": 20 } ] } ] }multiple transactions
$ cat /tmp/students.json { "transaction": [ { "statement": "INSERT INTO students (id, first_name, last_name, age) VALUES (:id, :val1, :val2, :val3)", "values": { "id": 1, "val1": "Jane", "val2": "Doe", "val3": 40 } }, { "query": "SELECT * FROM students" } ] }
$ curl -s -X POST -H "Content-Type: application/json" -d @/tmp/students.json http://localhost:12321/students | jq { "results": [ { "success": true, "rowsUpdated": 1 }, { "success": true, "resultHeaders": [ "id", "first_name", "last_name", "age" ], "resultSet": [ { "id": 1, "first_name": "Jane", "last_name": "Doe", "age": 40 }, { "id": 101, "first_name": "John", "last_name": "Doe", "age": 20 } ] } ] }