Skip to content

eveningkid/denodb

Repository files navigation

DenoDB

⛔️ This project is not actively maintained: expect issues, and delays in reviews

  • 🗣 Supports PostgreSQL, MySQL, MariaDB, SQLite and MongoDB
  • 🔥 Simple, typed API
  • 🦕 Deno-ready
  • Read the documentation
import{DataTypes,Database,Model,PostgresConnector}from'https://deno.land/x/denodb/mod.ts';

constconnection=newPostgresConnector({
host:'...',
username:'user',
password:'password',
database:'airlines',
});

constdb=newDatabase(connection);

classFlightextendsModel{
statictable='flights';
statictimestamps=true;

staticfields={
id:{primaryKey:true,autoIncrement:true},
departure:DataTypes.STRING,
destination:DataTypes.STRING,
flightDuration:DataTypes.FLOAT,
};

staticdefaults={
flightDuration:2.5,
};
}

db.link([Flight]);

awaitdb.sync({drop:true});

awaitFlight.create({
departure:'Paris',
destination:'Tokyo',
});

// or

constflight=newFlight();
flight.departure='London';
flight.destination='San Francisco';
awaitflight.save();

awaitFlight.select('destination').all();
// [ { destination: "Tokyo" }, { destination: "San Francisco" } ]

awaitFlight.where('destination','Tokyo').delete();

constsfFlight=awaitFlight.select('destination').find(2);
// { destination: "San Francisco" }

awaitFlight.count();
// 1

awaitFlight.select('id','destination').orderBy('id').get();
// [ { id: "2", destination: "San Francisco" } ]

awaitsfFlight.delete();

awaitdb.close();

First steps

Setting up your database with DenoDB is a four-step process:

  • Create a database,usingDatabase(learn moreabout clients):

    constconnection=newPostgresConnector({
    host:'...',
    username:'user',
    password:'password',
    database:'airlines',
    });
    
    constdb=newDatabase(connection);
  • Create models,extendingModel.tableandfieldsare both required static attributes:

    classUserextendsModel{
    statictable='users';
    
    statictimestamps=true;
    
    staticfields={
    id:{
    primaryKey:true,
    autoIncrement:true,
    },
    name:DataTypes.STRING,
    email:{
    type:DataTypes.STRING,
    unique:true,
    allowNull:false,
    length:50,
    },
    };
    }
  • Link your models,to add them to your database instance:

    db.link([User]);
  • Optional:Create tables in your database,by usingsync(...):

    awaitdb.sync();
  • Query your models!

    awaitUser.create({name:'Amelia'});
    awaitUser.all();
    awaitUser.deleteById('1');

Migrate from previous versions

License

MIT License —eveningkid