A higher level SQLite database wrapper. This interface is implemented for other databases too.
See also: db_odbc, db_postgres, db_mysql.
All db_*
modules support the same form of parameter substitution. That is, using the ?
(question mark) to signify the place where a value should be placed. For example:
sql"INSERT INTO myTable (colA, colB, colC) VALUES (?, ?, ?)"
import db_sqlite let db = open("mytest.db", nil, nil, nil) # user, password, database name can be nil db.close()
db.exec(sql"DROP TABLE IF EXISTS myTable") db.exec(sql("""CREATE TABLE myTable ( id integer, name varchar(50) not null)"""))
db.exec(sql"INSERT INTO myTable (id, name) VALUES (0, ?)", "Jack")
import db_sqlite, math let theDb = open("mytest.db", "", "", "") theDb.exec(sql"Drop table if exists myTestTbl") theDb.exec(sql("""create table myTestTbl ( Id INTEGER PRIMARY KEY, Name VARCHAR(50) NOT NULL, i INT(11), f DECIMAL(18,10))""")) theDb.exec(sql"BEGIN") for i in 1..1000: theDb.exec(sql"INSERT INTO myTestTbl (name,i,f) VALUES (?,?,?)", "Item#" & $i, i, sqrt(i.float)) theDb.exec(sql"COMMIT") for x in theDb.fastRows(sql"select * from myTestTbl"): echo x let id = theDb.tryInsertId(sql"INSERT INTO myTestTbl (name,i,f) VALUES (?,?,?)", "Item#1001", 1001, sqrt(1001.0)) echo "Inserted item: ", theDb.getValue(sql"SELECT name FROM myTestTbl WHERE id=?", id) theDb.close()
DbConn = PSqlite3
Row = seq[string]
InstantRow = Pstmt
proc dbError(db: DbConn) {...}{.noreturn, raises: [DbError], tags: [].}
proc dbQuote(s: string): string {...}{.raises: [], tags: [].}
proc tryExec(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): bool {...}{. tags: [ReadDbEffect, WriteDbEffect], raises: [].}
proc exec(db: DbConn; query: SqlQuery; args: varargs[string, `$`]) {...}{. tags: [ReadDbEffect, WriteDbEffect], raises: [DbError].}
proc `[]`(row: InstantRow; col: int32): string {...}{.inline, raises: [], tags: [].}
proc len(row: InstantRow): int32 {...}{.inline, raises: [], tags: [].}
proc getRow(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): Row {...}{. tags: [ReadDbEffect], raises: [DbError].}
proc getAllRows(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): seq[Row] {...}{. tags: [ReadDbEffect], raises: [DbError].}
proc getValue(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): string {...}{. tags: [ReadDbEffect], raises: [DbError].}
proc tryInsertID(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): int64 {...}{. tags: [WriteDbEffect], raises: [].}
proc insertID(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): int64 {...}{. tags: [WriteDbEffect], raises: [DbError].}
RETURNING id
to the query, so it only works if your primary key is named id
. proc execAffectedRows(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): int64 {...}{. tags: [ReadDbEffect, WriteDbEffect], raises: [DbError].}
proc close(db: DbConn) {...}{.tags: [DbEffect], raises: [DbError].}
proc open(connection, user, password, database: string): DbConn {...}{.tags: [DbEffect], raises: [DbError].}
connection
parameter is used for sqlite
. proc setEncoding(connection: DbConn; encoding: string): bool {...}{.tags: [DbEffect], raises: [DbError].}
sets the encoding of a database connection, returns true for success, false for failure.
Note that the encoding cannot be changed once it's been set. According to SQLite3 documentation, any attempt to change the encoding after the database is created will be silently ignored.
iterator fastRows(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): Row {...}{. tags: [ReadDbEffect], raises: [DbError].}
Executes the query and iterates over the result dataset.
This is very fast, but potentially dangerous. Use this iterator only if you require ALL the rows.
Breaking the fastRows() iterator during a loop will cause the next database query to raise a DbError exception unable to close due to ...
.
iterator instantRows(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): InstantRow {...}{. tags: [ReadDbEffect], raises: [DbError].}
iterator instantRows(db: DbConn; columns: var DbColumns; query: SqlQuery; args: varargs[string, `$`]): InstantRow {...}{.tags: [ReadDbEffect], raises: [DbError].}
iterator rows(db: DbConn; query: SqlQuery; args: varargs[string, `$`]): Row {...}{. tags: [ReadDbEffect], raises: [DbError].}
© 2006–2018 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/db_sqlite.html