docs/1.31/get-started/01-setting-up-prisma-new-database-GO-g002.mdx
import QueryChooser from 'components/Markdown/QueryChooser' import Code from 'components/Markdown/Code' import Collapse from 'components/Markdown/Collapse'
export const meta = { title: 'Set up Prisma', position: 1, gettingStartedOrder: 1, gettingStartedTitle: 'New database', nextText: 'Great work! 👏 Move on to learn how you can change your datamodel and (re-)generate your Prisma client.', technology: 'go', technologyOrder: 4, articleGroup: 'Set up Prisma', }
On this page, you will learn how to:
The Prisma CLI is used for various Prisma workflows. You can install it using Homebrew or NPM:
<Code languages={["Homebrew", "NPM"]}>
brew tap prisma/prisma
brew install prisma
npm install -g prisma
To use Prisma locally, you need to have Docker installed on your machine. If you don't have Docker yet, you can download the Docker Community Edition for your operating system here.
Don't want to use Docker? You can also get started with a demo database for now.
mkdir hello-world
cd hello-world
To launch Prisma on your machine, you need a Docker Compose file that configures Prisma and specifies the database it can connect to.
touch docker-compose.yml
Paste the following contents into the Docker Compose file you just created:
<Code languages={["MySQL", "PostgreSQL", "MongoDB"]}>
version: '3'
services:
prisma:
image: prismagraphql/prisma:1.31
restart: always
ports:
- "4466:4466"
environment:
PRISMA_CONFIG: |
port: 4466
databases:
default:
connector: mysql
host: mysql
port: 3306
user: root
password: prisma
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: prisma
volumes:
- mysql:/var/lib/mysql
volumes:
mysql: ~
version: '3'
services:
prisma:
image: prismagraphql/prisma:1.31
restart: always
ports:
- "4466:4466"
environment:
PRISMA_CONFIG: |
port: 4466
databases:
default:
connector: postgres
host: postgres
port: 5432
user: prisma
password: prisma
postgres:
image: postgres:10.3
restart: always
environment:
POSTGRES_USER: prisma
POSTGRES_PASSWORD: prisma
volumes:
- postgres:/var/lib/postgresql/data
volumes:
postgres: ~
version: '3'
services:
prisma:
image: prismagraphql/prisma:1.31
restart: always
ports:
- "4466:4466"
environment:
PRISMA_CONFIG: |
port: 4466
databases:
default:
connector: mongo
uri: mongodb://prisma:prisma@mongo
mongo:
image: mongo:3.6
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: prisma
MONGO_INITDB_ROOT_PASSWORD: prisma
ports:
- "27017:27017"
volumes:
- mongo:/var/lib/mongo
volumes:
mongo: ~
You can switch between MySQL, PostgreSQL and MongoDB by using the tabs above the code block.
To start Prisma and launch the connected database, run the following command:
docker-compose up -d
Prisma is now connected to a local database and runs on http://localhost:4466.
The Prisma server is currently unprotected, meaning everyone with access to its endpoint can send arbitrary requests to it. To secure the Prisma server, you need to set the managementApiSecret property in your Docker Compose file when deploying the server.
When using the Prisma CLI, you then need to set the PRISMA_MANAGEMENT_API_SECRET to the same value so that the CLI can authenticate against the secured server. Learn more here.
To bootstrap the configuration files for your Prisma client run the following command:
prisma init --endpoint http://localhost:4466
The
endpointneeds to match the URL of a running Prisma server.
The prisma init command created the minimal setup needed to deploy the Prisma datamodel: prisma.yml and datamodel.prisma.
The MongoDB connector uses a new datamodel format than the currently supported SQL databases. The datamodel and prisma.yml need to be configured specifically for MongoDB.
Add the databaseType property to prisma.yml so that it looks as follows:
<Code lines={["3"]}>
endpoint: http://localhost:4466
datamodel: datamodel.prisma
databaseType: document
Now adjust datamodel.prisma to use the new directives:
type User {
id: ID! @id
name: String!
}
With these configuration files, you can now deploy the Prisma API:
prisma deploy
Congratulations, you have successfully set up Prisma. You can now start using the Prisma client to talk to your database from code.
If you want to view and edit the data in your database, you can use Prisma Admin. To access Prisma Admin, you need to append /_admin to your Prisma endpoint, for example: http://localhost:4466/_admin.
The Prisma client is a custom, auto-generated library that connects to your Prisma API. Append the following lines to the end of your prisma.yml:
generate:
- generator: go-client
output: ./generated/prisma-client/
Now generate the client with this command:
prisma generate
The CLI now stored your Prisma client inside the ./generated/prisma-client/ directory as specified in prisma.yml.
touch index.go
You'll be using dep for dependency management in this tutorial. Run the following command to create the required setup:
dep init
Great, you're now ready to write some code and talk to your database programmatically!
Add the following code in index.go:
package main
import (
"context"
"fmt"
prisma "hello-world/generated/prisma-client"
)
func main() {
client := prisma.New(nil)
ctx := context.TODO()
// Create a new user
name := "Alice"
newUser, err := client.CreateUser(prisma.UserCreateInput{
Name: name,
}).Exec(ctx)
if err != nil {
panic(err)
}
fmt.Printf("Created new user: %+v\\n", newUser)
users, err := client.Users(nil).Exec(ctx)
if err != nil {
panic(err)
}
fmt.Printf("%+v\\n", users)
}
Before executing the script, you need to ensure all dependencies are available. Run the following command:
dep ensure
Now execute the script with the following command:
go run index.go
Whenever you run the script with that command, a new user record is created in the database (because of the call to createUser).
Feel free to play around with the Prisma client API and try out some of the following operations by adding the following code snippets to the file (at the end of the main function) and re-executing the script:
<QueryChooser titles={["Fetch single user", "Filter user list", "Update a user's name", "Delete user"]}>
id := "__USER_ID__"
userById, err := client.User(prisma.UserWhereUniqueInput{
ID: &id,
}).Exec(ctx)
filter := "Alice"
posts, err := client.Users(&prisma.UsersParams{
Where: &prisma.UserWhereInput{
Name: &filter,
},
}).Exec(ctx)
id := "__USER_ID__"
newName := "Bob"
updatedUser, err := client.UpdateUser(prisma.UserUpdateParams{
Where: prisma.UserWhereUniqueInput{
ID: &id,
},
Data: prisma.UserUpdateInput{
Name: &newName,
},
}).Exec(ctx)
id := "__USER_ID__"
deletedUser, err := client.DeleteUser(prisma.UserWhereUniqueInput{
ID: &id,
}).Exec(ctx)
In some snippets, you need to replace the
__USER__ID__placeholder with the ID of an actual user.