sql >> データベース >  >> RDS >> Database

Prisma、データベースをクリアする方法

    Prismaを使用しているサイトをテストしている間、入力したテストデータをクリアするために、時々データベースをクリアする必要がありました。

    次を使用して入力したアイテムをクリアできます:

    await prisma.user.deleteMany({})

    何らかの理由でアイテムを反復処理して処理を実行する場合は、次の方法でアイテムを反復処理できます。

    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()内で好きなことを行うことができます。 。

    ツイートとユーザーの2つのテーブルの関係があったので問題がありました。ツイートがユーザーに関連付けられました。最初にすべてのツイートを削除し、次にすべてのユーザーを削除する必要があったため、次の関数を作成しました:

    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を使うことができました そのため、ユーザーの削除を開始する前にすべてのツイートが削除されます。


    1. お客様にふさわしいもの:MariaDBエンタープライズドキュメントの紹介

    2. repmgr2.0の発表

    3. SQLite-データベースをファイルにバックアップ

    4. OracleDatabaseで有効なタイムゾーンのリストを返す方法