# How to get last inserted row id in SQLite3?

**URL:** <https://racket.discourse.group/t/how-to-get-last-inserted-row-id-in-sqlite3/2924>\
**Category:** Questions & Answers\
**Tags:** sqlite\
**Created:** [May 17, 2024, 8:51am UTC](https://racket.discourse.group/t/how-to-get-last-inserted-row-id-in-sqlite3/2924 "2024-05-17T08:51:51Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tomek](https://avatars.discourse-cdn.com/v4/letter/t/3ab097/32.png) [@Tomek](https://racket.discourse.group/u/Tomek)\
**Post date:** [May 17, 2024, 8:51am UTC](https://racket.discourse.group/t/how-to-get-last-inserted-row-id-in-sqlite3/2924/1 "2024-05-17T08:51:51Z")

</div>

Simple question: how can I get the (last) inserted row id using SQLite3 with Racket and the db module/package (whatever it is called)?

In SQLite3 there's the `sqlite3_last_insert_rowid` function. Is there any equivalent in Racket?

...or is there a different solution to the following transaction problem:

```scheme
  insert a new row
  get the inserted row id
  insert another row, using the inserted row id
  ...

```

---

<div class="post-metadata">

**Author:** ![bakgatviooldoos](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/bakgatviooldoos/32/1381_2.png) [@bakgatviooldoos](https://racket.discourse.group/u/bakgatviooldoos)\
**Post date:** [May 17, 2024, 9:06am UTC](https://racket.discourse.group/t/how-to-get-last-inserted-row-id-in-sqlite3/2924/2 "2024-05-17T09:06:18Z")

</div>

Hi, @Tomek.

Is this what you mean?

```scheme
#lang racket

(require db)

(define conn
  (sqlite3-connect
   #:database 'temporary
   #:mode 'create))

(query-exec conn
            "CREATE TEMPORARY TABLE the_numbers (n NUMBER, d TEXT)")

(query conn
       "INSERT INTO the_numbers VALUES (3, 'a crowd')")

; => (simple-result '((insert-id . 1) (affected-rows . 1)))

```

Found here: [`query`](https://docs.racket-lang.org/db/query-api.html#%28def._%28%28lib._db%2Fbase..rkt%29._query%29%29).

---

<div class="post-metadata">

**Author:** ![Tomek](https://avatars.discourse-cdn.com/v4/letter/t/3ab097/32.png) [@Tomek](https://racket.discourse.group/u/Tomek)\
**Post date:** [May 17, 2024, 9:26am UTC](https://racket.discourse.group/t/how-to-get-last-inserted-row-id-in-sqlite3/2924/3 "2024-05-17T09:26:33Z")

</div>

Yes, I believe that's it.

Thanks.

I'm new to Racket, and I'm still evaluating it (comparing mostly to Python and C). Documentation is vast, and I'm still learning how to read it.

---

<div class="post-metadata">

**Author:** ![bakgatviooldoos](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/bakgatviooldoos/32/1381_2.png) [@bakgatviooldoos](https://racket.discourse.group/u/bakgatviooldoos)\
**Post date:** [May 17, 2024, 9:31am UTC](https://racket.discourse.group/t/how-to-get-last-inserted-row-id-in-sqlite3/2924/4 "2024-05-17T09:31:55Z")

</div>

I'm glad.

For what it's worth, I came from Python/Java to Racket, and I also felt overwhelmed at first, but as you say the documentation _is_ vast, and contains many a shiny pearl.

Happy reading!

---

<div class="post-metadata">

**Author:** ![ryanc](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/ryanc/32/71_2.png) [@ryanc](https://racket.discourse.group/u/ryanc)\
**Post date:** [May 17, 2024, 10:09am UTC](https://racket.discourse.group/t/how-to-get-last-inserted-row-id-in-sqlite3/2924/5 "2024-05-17T10:09:54Z")

</div>

Since SQLite 3.35, you can also use [`RETURNING`](https://www.sqlite.org/lang_returning.html): like

```sql
INSERT INTO the_numbers (n, d) VALUES (12, 'a dozen') RETURNING rowid;

```
