Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/crawshaw/sqlite
Go SQLite3 driver
https://github.com/crawshaw/sqlite
golang sqlite
Last synced: 3 days ago
JSON representation
Go SQLite3 driver
- Host: GitHub
- URL: https://github.com/crawshaw/sqlite
- Owner: crawshaw
- License: isc
- Created: 2018-03-30T12:28:06.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-04-21T13:29:20.000Z (9 months ago)
- Last Synced: 2025-01-03T08:09:49.677Z (10 days ago)
- Topics: golang, sqlite
- Language: C
- Homepage:
- Size: 6.29 MB
- Stars: 582
- Watchers: 15
- Forks: 67
- Open Issues: 35
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Go interface to SQLite.
[![GoDoc](https://godoc.org/crawshaw.io/sqlite?status.svg)](https://godoc.org/crawshaw.io/sqlite) [![Build Status](https://travis-ci.org/crawshaw/sqlite.svg?branch=master)](https://travis-ci.org/crawshaw/sqlite) (linux and macOS) [![Build status](https://ci.appveyor.com/api/projects/status/jh9xx6cut73ufkl8?svg=true)](https://ci.appveyor.com/project/crawshaw/sqlite) (windows)
This package provides a low-level Go interface to SQLite 3. Connections are [pooled](https://godoc.org/crawshaw.io/sqlite#Pool) and if the SQLite [shared cache](https://www.sqlite.org/sharedcache.html) mode is enabled the package takes advantage of the [unlock-notify API](https://www.sqlite.org/unlock_notify.html) to minimize the amount of handling user code needs for dealing with database lock contention.
It has interfaces for some of SQLite's more interesting extensions, such as [incremental BLOB I/O](https://www.sqlite.org/c3ref/blob_open.html) and the [session extension](https://www.sqlite.org/sessionintro.html).
A utility package, [sqlitex](https://godoc.org/crawshaw.io/sqlite/sqlitex), provides some higher-level tools for making it easier to perform common tasks with SQLite. In particular it provides support to make nested transactions easy to use via [sqlitex.Save](https://godoc.org/crawshaw.io/sqlite/sqlitex#Save).
This is not a database/sql driver.
```go get -u crawshaw.io/sqlite```
## Example
A HTTP handler that uses a multi-threaded pool of SQLite connections via a shared cache.
```go
var dbpool *sqlitex.Poolfunc main() {
var err error
dbpool, err = sqlitex.Open("file:memory:?mode=memory", 0, 10)
if err != nil {
log.Fatal(err)
}
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}func handler(w http.ResponseWriter, r *http.Request) {
conn := dbpool.Get(r.Context())
if conn == nil {
return
}
defer dbpool.Put(conn)
stmt := conn.Prep("SELECT foo FROM footable WHERE id = $id;")
stmt.SetText("$id", "_user_id_")
for {
if hasRow, err := stmt.Step(); err != nil {
// ... handle error
} else if !hasRow {
break
}
foo := stmt.GetText("foo")
// ... use foo
}
}
```https://godoc.org/crawshaw.io/sqlite
## Platform specific considerations
By default it requires some pthreads DLL on Windows. To avoid it, supply `CGOLDFLAGS="-static"` when building your application.