«

Connect to a Database

Previously you learned how to run a transactor. This section guides on how to connect to a database.

Creating a Database

  • To begin, launch a REPL from the root directory of the Datomic folder using the bin/repl script:
bin/repl
  • Require the Peer API:
(require '[datomic.api :as d])
=>
nil

The Datomic Peer API names databases with a URI that includes the protocol name, storage connection information, and a database name. The complete URI for a database named "hello" on the transactor you started in the previous step is "datomic:dev://localhost:4334/hello".

  • Def a var, db-uri, with this name:
(def db-uri "datomic:dev://localhost:4334/hello")

=>
#'user/db-uri
  • Create the "hello" database using the create-database function:
(d/create-database db-uri)
=>
true

Create a Connection

Once you have created a database, you can use the Datomic peer library to interact with it.

  • Connect to the transactor in the same REPL that you used to create your database:
(def conn (d/connect db-uri))
=>
#'user/conn
  • You will see that a var was created called conn which is holding your database connection. To inspect it, run:
conn
=> #object[datomic.peer.Connection
        0x10a59519
        "{:unsent-updates-queue 0, :pending-txes 0, :next-t 1005, :basis-t 1001, :index-rev 0, :db-id \"hello-c33c1487-877a-404a-88d0-0aac99518598\"}"]

Any transactions submitted to the connection will be persisted in the storage that you chose when creating your database.

  • Try adding a new entity with the :db/doc value "Hello world":
@(d/transact conn [{:db/doc "Hello world"}])
=>
{:db-before datomic.db.Db@e438f2c9,
 :db-after datomic.db.Db@5d0a1343,
 :tx-data [#datom[13194139534317 50 #inst"2024-05-13T00:52:21.776-00:00" 13194139534317 true]
           #datom[17592186045422 62 "Hello world" 13194139534317 true]],
 :tempids {-9223300668110598143 17592186045422}}

Interact with Datomic

The next step will be to define some schema for your new database.