Prisma Seed
Il est primordial que toutes les commandes terminal doivent être exécuté dans le répertoire racine du projet prisma. Autrement on risque les comportement inattendu, sans garantie d'une erreur explicite.
Seed est un typescript exécuté après création d'un schéma pour prépeupler des tables.
L'emplacement conventionnel se trouve àprisma/seed.ts`
Il est tout à fait possible utiliser les autres emplacements. Toutefois il faut specifier en package.json :
"prisma": {
"seed": "ts-node prisma/seed.ts"
Un exemple
import 'dotenv/config';
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
const domainNames = [
'MECHANICS',
'THERMODYNAMICS',
'OPTICS',
'ELECTROMAGNETISM',
'QUANTUM_PHYSICS',
'RELATIVITY',
'PARTICLE_PHYSICS',
'NUCLEAR_PHYSICS',
'ASTROPHYSICS',
'CONDENSED_MATTER',
'STATISTICAL_PHYSICS',
'GEOPHYSICS',
'BIOPHYSICS',
'ORGANIC_CHEMISTRY',
'INORGANIC_CHEMISTRY',
'PHYSICAL_CHEMISTRY',
'ANALYTICAL_CHEMISTRY',
'BIOCHEMISTRY',
'POLYMER_CHEMISTRY',
'SURFACE_CHEMISTRY',
'ENVIRONMENTAL_CHEMISTRY',
'INDUSTRIAL_CHEMISTRY',
'MATERIAL_SCIENCE',
] as const;
for (const name of domainNames) {
await prisma.domain.upsert({
where: { name },
update: {},
create: { name },
});
}
console.log(`Seeded ${domainNames.length} domains.`);
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});
Notez la méthode typique est upsert(), qui est la combinaison idempotent d'insert() et de update(). upsert() assurent que si le seed.ts est réexécuté (après une réinitialisation, etc.), aucun duplicat n'est crée.
Ex .
écution
npx prisma db seed
npx prisma migrate devexécutera normalementseed.tsde manière automatique.
Member discussion