docs/1.25/get-started/01-setting-up-prisma-existing-database-GO-g003.mdx
import Warning from 'components/Markdown/Warning' 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: 2, gettingStartedTitle: 'Existing database', nextText: 'Great work! 👏 Move on to learn how you can extend your datamodel and make changes to your Prisma API.', technology: 'go', technologyOrder: 4, articleGroup: 'Set up Prisma', }
On this page, you will learn how to:
Using your existing database with Prisma currently only works when using PostgreSQL or MongoDB databases. It is not yet supported for MySQL.
</Warning>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.
Run the following command to connect Prisma to your existing database:
prisma init hello-world
This launches an interactive wizard. Here's what you need to do:
localhost. (When connecting to a local database, you might need to use host.docker.internal.)5432.public.true and false.http://user1:myPassword@localhost:27017/admin. Note that this must include the database credentials as well as the authSource database that's storing the credentials of your MongoDB admin user (by default it is often called admin). Learn more here.If you're using MongoDB Atlas, you can find your connection string by clicking the CONNECT-button on your cluster overview page. It looks similar to this: mongodb+srv://user:[email protected]/test?retryWrites=true.
To start Prisma and connect it to your database, run the following commands:
cd hello-world
docker-compose up -d
Prisma is now connected to your database and runs on http://localhost:4466.
You now have the minimal setup ready to deploy your Prisma datamodel. Run the following command (this does not change anything in your database):
prisma deploy
Launching the Prisma server may take a few minutes. In case the prisma deploy command fails, wait a few minutes and try again. Also run docker ps to ensure the Prisma Docker container is actually running.
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!
The API operations of the Prisma client depend on the datamodel that was generated from the database introspection. The following sample queries assume there is a User type in the datamodel defined as follows:
type User {
id: ID! @unique
name: String!
}
If you don't have such a User type, you need to adjust the following code snippets with a type that matches your datamodel.
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)
// Fetch all users
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.