/

Prisma,如何清空資料庫

Prisma,如何清空資料庫

在測試使用Prisma的網站時,我經常需要清空資料庫,以清除我輸入的測試資料。

你可以使用以下方法來清除資料:

1
await prisma.user.deleteMany({})

如果出於某些原因你需要逐個進行處理,可以按以下方式對它們進行迭代:

1
2
3
4
5
6
7
8
9
10
11
12
13
const users = await prisma.user.findMany({})

const deleteUser = async (user) => {
return await prisma.user.delete({
where: { id: user.id }
})
}

const deleteUsers = async () => {
users.map((user) => deleteUser(user))
}

deleteUsers()

在這個例子中,其實比前面的例子多了些冗余程式碼,但你可以在deleteUser()中進行更多操作。

然而,我遇到了一個問題,因為兩個表之間存在關聯,即tweets和users。一篇tweet與一個user相關聯。所以我需要先刪除所有的tweets,然後再刪除所有的users。為此,我編寫了以下函數:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
export const clearData = async (prisma) => {
const users = await prisma.user.findMany({})
const tweets = await prisma.tweet.findMany({})

const deleteUser = async (user) => {
return await prisma.user.delete({
where: { id: user.id }
})
}

const deleteTweet = async (tweet) => {
return await prisma.tweet.delete({
where: { id: tweet.id }
})
}

const deleteTweets = async () => {
return Promise.all(tweets.map((tweet) => deleteTweet(tweet)))
}

const deleteUsers = async () => {
return Promise.all(users.map((user) => deleteUser(user)))
}

await deleteTweets()
await deleteUsers()
}

值得注意的是,我使用了Promise.all()來封裝users.map(),這樣我可以在其上使用await,以便在開始刪除users之前先刪除所有tweets。

tags: [“Prisma”, “database”, “clear data”]