mirror of
https://gitea.invidious.io/iv-org/shard-crystal-sqlite3.git
synced 2024-08-15 00:53:26 +00:00
3.1 KiB
3.1 KiB
crystal-sqlite3 ![Build Status](https://travis-ci.org/crystal-lang/crystal-sqlite3.svg?branch=master)
SQLite3 bindings for Crystal.
Check crystal-db for general db driver documentation. crystal-sqlite3 driver is registered under sqlite3://
uri.
Installation
Add this to your application's shard.yml
:
dependencies:
sqlite3:
github: crystal-lang/crystal-sqlite3
Usage
require "sqlite3"
DB.open "sqlite3://./data.db" do |db|
db.exec "create table contacts (name text, age integer)"
db.exec "insert into contacts values (?, ?)", "John Doe", 30
args = [] of DB::Any
args << "Sarah"
args << 33
db.exec "insert into contacts values (?, ?)", args: args
puts "max age:"
puts db.scalar "select max(age) from contacts" # => 33
puts "contacts:"
db.query "select name, age from contacts order by age desc" do |rs|
puts "#{rs.column_name(0)} (#{rs.column_name(1)})"
# => name (age)
rs.each do
puts "#{rs.read(String)} (#{rs.read(Int32)})"
# => Sarah (33)
# => John Doe (30)
end
end
end
Example 2
db = DB.open "sqlite3://./data.db"
db.exec "CREATE TABLE IF NOT EXISTS contacts (name text, age integer)"
db.exec "INSERT INTO contacts VALUES (?, ?)", "John Doe", 30
contacts = db.query_all "SELECT name, age FROM contacts", as: {name: String, age: Int64}
DB::Any
Time
is implemented asTEXT
column usingSQLite3::DATE_FORMAT_SUBSECOND
format (orSQLite3::DATE_FORMAT_SECOND
if the text does not contain a dot).Bool
is implemented asINT
column mapping0
/1
values.
Setting PRAGMAs
You can adjust certain SQLite3 PRAGMAs automatically when the connection is created by using the query parameters:
require "sqlite3"
DB.open "sqlite3://./data.db?journal_mode=wal&synchronous=normal" do |db|
# this database now uses WAL journal and normal synchronous mode
# (defaults were `delete` and `full`, respectively)
end
The following is the list of supported options:
Name | Connection key |
---|---|
Busy Timeout | busy_timeout |
Cache Size | cache_size |
Foreign Keys | foreign_keys |
Journal Mode | journal_mode |
Synchronous | synchronous |
WAL autocheckoint | wal_autocheckpoint |
Please note there values passed using these connection keys are passed directly to SQLite3 without check or evaluation. Using incorrect values result in no error by the library.