この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
こんにちは!たぬきうどんです!
私は2018年に非IT業界から未経験でエンジニアに転職し、現在までエンジニアとして働いています。
この記事は既存のDBからPrismaのData Modelを作成する方法を書いています。
Prismaを使いたいけど、既存のDBからData Modelを作成したいときどうすればいいんだろう?
という方はぜひご覧ください!
実行方法
環境はこちらの記事で構築した環境を使用し、prisma init
を行ったPrisma初期化直後の状態です。
DBには上記記事に引き続き、PostgreSQLを使用します。
それでは始めていきましょう!
【初期設定】DBに必要なテーブルを作成しておく
今回はteam
テーブルとその子テーブルであるperson
テーブルを作成します。
テーブル作成に使用したしたSQLは以下です。
CREATE TABLE team (
id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE person (
id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age INTEGER NOT NULL,
address VARCHAR(100),
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
team_id INTEGER REFERENCES team(id)
);
作成されたテーブルは以下です。
DBからData Modelを作成する
それではDBからData Modelを作成していきましょう。
以下のコマンドを実行してください。
npx prisma db pull
上記のコマンドを実行することで、DBに接続し、DBのスキーマをPrismaスキーマファイル(schema.prisma
)に反映させます。
その際にData Modelが作成されます。
それではschema.prisma
を見てみましょう。
// 以下追加されたもの
model person {
id Int @id @default(autoincrement())
name String @db.VarChar(30)
age Int
address String? @db.VarChar(100)
created_at DateTime? @default(now()) @db.Timestamptz(6)
team_id Int?
team team? @relation(fields: [team_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
}
model team {
id Int @id @default(autoincrement())
name String @db.VarChar(30)
created_at DateTime? @default(now()) @db.Timestamptz(6)
person person[]
}
このようにData Modelが作成されます。
非常に簡単に作成することができますね!
ただ、prisma db pull
は現在のschema.prisma
を上書きしてしまいますので、その点は注意しましょう。
prisma db pull --print
のように--print
オプションを付けると、ファイルに書き込まれず、標準出力されます。
まずは--pull
をつけて実行し、標準出力されたもので差分を確認するのがいいでしょう。
Prisma Clientを更新する
Prismaスキーマを更新したので、Prisma Clientも更新しておきます。
以下のコマンドを実行します。
npx prisma generate
prisma generate
を実行することで、node_modules/.prisma/client
が更新されます。
VS Codeを使用している場合はエディタの再読み込みを行っておくことで、
このようにインテリセンスが効くようになります。
おわりに
以上が既存のDBからPrismaのData Modelを作成する方法でした。
このようにPrismaでは非常に簡単に既存のDBからData Modelを作成することができます。
「Prismaを更に知りたい!」というかたは公式のドキュメントを見てみてください。
この記事が皆さんの助けになれば幸いです!
最後まで読んでいただき、ありがとうございました!