Support us by giving us a
star on Github 🚀

Querying SQLite Using `fastn`

Note: This document is about querying SQLite Database that is part of your `fastn` package. You can also [query PostgreSQL using `fastn`](/sql/). `package-query` processor allows you to execute SQL queries against SQLite files that are part of your `fastn` package.
⚠️
Static Vs Dynamic
This feature works better with dynamic hosting. If you are using `fastn` in [static site mode](/static/), then how the page looked when `fastn build` was called will be shown to everyone. But if you are using [dynamic mode](/server/) then this page would be regenerated on every page load.
And say you have an SQLite database file with table like this:
creating table
-- run `sqlite3 db.sqlite` in shell to create the database
-- and paste this

CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
department TEXT
);
Lang:
sql
And you have initilised it like this:
inserting data
INSERT INTO user (name, department) VALUES ("amit", "engineering");
INSERT INTO user (name, department) VALUES ("jack", "ops");
Lang:
sql
Assuming the SQLite file is `db.sqlite`, you can fetch data from the SQLite database using `package-query` processor:
querying database and storing result in a list
-- import: fastn/processors as pr

-- person list people:
$processor$: pr.package-query
db: db.sqlite

SELECT * FROM user;
Lang:
ftd
For this to work you have to also create a record with same data as the result of your SQL query. In this query you are using `SELECT *`, which will fetch all three columns, `id`, `name` and `department`, so your record will look something like this:
a record corresponding to your query result
-- record person:
integer id:
string name:
string department:
Lang:
ftd
Note that the type columns in query result must match the type of fields in the record. The order of fields of record must also match the order of columns in the query result. Also note that since the result of this query can be multiple rows (or one or none), we have to read the result in a `person list`, so all data can be stored in corresponding list.
Now that you have data in a variable, you can pass it to some component to view it using the [`$loop$`](/list/#using-loop):
show data in page ([view full source](https://github.com/fastn-stack/fastn.com/blob/main/ftd-host/package-query.ftd))
-- show-person: $p
for: $p in $people
Lang:
ftd
Which will look something like this:

Person

Name
amit
Department
engineering

Person

Name
jack
Department
ops

Support `fastn`!

Enjoying `fastn`? Please consider giving us a star ⭐️ on [GitHub](https://github.com/fastn-stack/fastn) to show your support!
[⭐️](https://github.com/fastn-stack/fastn)

Getting Help

Have a question or need help? Visit our [GitHub Q&A discussion](https://github.com/fastn-stack/fastn/discussions/categories/q-a) to get answers and subscribe to it to stay tuned. Join our [Discord](https://discord.gg/a7eBUeutWD) channel and share your thoughts, suggestion, question etc. Connect with our [community](/community/)!
[💻️](/community/)

Found an issue?

If you find some issue, please visit our [GitHub issues](https://github.com/fastn-stack/fastn/issues) to tell us about it.

Quick links:

- [Install `fastn`](install/) - [Create `fastn` package](create-fastn-package/) - [Expander Crash Course](expander/) - [Syntax Highlighting in Sublime Text](/sublime/)

Join us

We welcome you to join our [Discord](https://discord.gg/a7eBUeutWD) community today. We are trying to create the language for human beings and we do not believe it would be possible without your support. We would love to hear from you.
Copyright © 2023 - fastn.com