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”]