mirror of
https://github.com/isar/rusqlite.git
synced 2024-11-22 16:29:20 +08:00
Ergonomic bindings to SQLite for Rust
7444f7b30a
Clarify support of older SQLite versions. |
||
---|---|---|
benches | ||
libsqlite3-sys | ||
src | ||
tests | ||
.gitignore | ||
.travis.yml | ||
appveyor.yml | ||
Cargo.toml | ||
Changelog.md | ||
clippy.toml | ||
CONTRIBUTORS.md | ||
LICENSE | ||
publish-ghp-docs.sh | ||
README.md |
Rusqlite
Rusqlite is an ergonomic wrapper for using SQLite from Rust. It attempts to expose an interface similar to rust-postgres. View the full API documentation.
extern crate rusqlite;
extern crate time;
use time::Timespec;
use rusqlite::Connection;
#[derive(Debug)]
struct Person {
id: i32,
name: String,
time_created: Timespec,
data: Option<Vec<u8>>
}
fn main() {
let conn = Connection::open_in_memory().unwrap();
conn.execute("CREATE TABLE person (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
time_created TEXT NOT NULL,
data BLOB
)", &[]).unwrap();
let me = Person {
id: 0,
name: "Steven".to_string(),
time_created: time::get_time(),
data: None
};
conn.execute("INSERT INTO person (name, time_created, data)
VALUES (?1, ?2, ?3)",
&[&me.name, &me.time_created, &me.data]).unwrap();
let mut stmt = conn.prepare("SELECT id, name, time_created, data FROM person").unwrap();
let person_iter = stmt.query_map(&[], |row| {
Person {
id: row.get(0),
name: row.get(1),
time_created: row.get(2),
data: row.get(3)
}
}).unwrap();
for person in person_iter {
println!("Found person {:?}", person.unwrap());
}
}
Supported SQLite Versions
The base rusqlite
package supports SQLite version 3.6.8 or newer. If you need
support for older versions, please file an issue. Some cargo features require a
newer SQLite version; see details below.
Optional Features
Rusqlite provides several features that are behind Cargo features. They are:
load_extension
allows loading dynamic library-based SQLite extensions.backup
allows use of SQLite's online backup API. Note: This feature requires SQLite 3.6.11 or later.functions
allows you to load Rust closures into SQLite connections for use in queries. Note: This feature requires SQLite 3.7.3 or later.trace
allows hooks into SQLite's tracing and profiling APIs. Note: This feature requires SQLite 3.6.23 or later.blob
givesstd::io::{Read, Write, Seek}
access to SQL BLOBs. Note: This feature requires SQLite 3.7.4 or later.limits
allows you to set and retrieve SQLite's per connection limits.chrono
implementsFromSql
andToSql
for various types from thechrono
crate.serde_json
implementsFromSql
andToSql
for theValue
type from theserde_json
crate.bundled
uses a bundled version of sqlite3. This is a good option for cases where linking to sqlite3 is complicated, such as Windows.
Author
John Gallagher, johnkgallagher@gmail.com
License
Rusqlite is available under the MIT license. See the LICENSE file for more info.