Patio este un motor de interogare inspirat de Sequel.

Instalare

Pentru a instala rula patio

npm instalati pieptene

Daca doriti sa utilizati executabilul patio pentru migrari

npm install -g patio

Teste de alergare

Pentru a rula testele

Pentru a rula doar testele postgres

Pentru a rula doar testele mysql

Rularea testelor cu Docker

Pentru a oferi un mediu de testare consistent si a face mai usor de testat, am inclus un fisier Docker si un docker-compose.yml pentru a facilita testarea intr-un mediu izolat. Puteti face acest lucru cu:

docker-compose build docker-compose up -d mysql postgres sleep 10 # Asteptati sa apara bazele de date docker-compose up patio

De ce sa folosesti terasa?

Patio este diferit, deoarece permite dezvoltatorilor sa aleaga nivelul de atractie cu care se simt confortabil.

Daca doriti sa utilizati functionalitatea ORM, puteti. Daca nu, puteti utiliza baza de date si seturile de date ca API de interogare si, daca aveti nevoie, puteti scrie SQL simplu

Concepte

  1. Definitiile modelului sunt definite de tabelele din baza de date.

    Pe masura ce adaugati modele, definitia este definita automat din definitia tabelului. Acest lucru este util mai ales atunci cand doriti sa va definiti modelul dintr-o schema proiectata folosind un alt instrument (de exemplu, ActiveRecord, Sequel, etc …)

  2. Patio incearca sa ramana departe de drum atunci cand interoga.

    Cand definiti un model, aveti in continuare libertatea de a face orice tip de interogare doriti.

    Vrei doar anumite coloane?

    MyModel.select (“id”, “nume”, “creat”). ForEach (functie (inregistrare) {// inregistrarea are doar id-ul, numele si coloanele create});

    Doriti sa va alaturati cu o alta masa?

    MyModel.join (“otherTable”, {id: patio.sql.identifier (“myModelId”}). ForEach (functie (inregistrare) {// Inregistrarea are acum coloane din tabelul de alaturare!});

    Doriti sa rulati SQL brut?

    MyModel.db.run (“select * from my_model where name = ‘Bob'”). All (). Chain (function (records) {// toate inregistrarile cu un nume egal cu bob.});

    Vrei sa interogi doar baza de date si sa nu folosesti un model?

    var DB = patio.connect (“pg: // test: [email protected]: 5432 / test_db”); DB.from (“tabelul meu”). Filter ({id: [1,2,3]}). All (). Functie (inregistrari) {// inregistrari cu id IN (1,2,3)});

Notiuni de baza

Tot codul pentru acest exemplu poate fi gasit aici

  1. Creati o noua baza de date

    PostgreSQL

    psql -c “CREATE DATABASE reademe_example”

    MySQL

    mysql -e “CREATE DATABASE readme_example”
  2. Creati o migratie

    mkdir migration patio migration-file -n createInitialTables ./migration

    Aceasta va adauga un nume de migrare createInitialTables in directorul dvs. de migrare.

  3. Adaugati urmatorul cod la migrare

    module.exports = {// up este apelat atunci cand va migrati baza de date in sus: functie (db) {// creati un tabel numit state; returneaza db .createTable (“state”, function () {this.primaryKey (“id”); this.

    porno muy duro pono gay
    incesto madre hijos randy dave
    jovencita caliente descargar pelis pornos
    maduras lesbianas tetonas peliculas porno vintage
    sexo con cincuentonas maduras españolas masturbandose
    cine xxx porno portugues
    corridas en la playa incesto real casero
    porno de abuelas corridas dentro de la boca
    shakira follando videos de follar
    mamadas de españolas orgia porno español
    comedias porno corridas de viejas
    madresxxx porno con argumento
    incesto abuelas sexo videos gratis
    trios gays anita teen pillada por torbe
    porno español años 70 coñosxxx
    madre follada a la fuerza porno viejas en español
    tias cachondas porno esp
    el mejor video porno madres viciosas
    cerdas com gratis porno india
    tetas en la playa peludas porno

    name (String); this.population (“integer”); this.founded (Data); this.climate (String ); this.description (“text”);}) .chain (function () {// creati un alt tabel numit capital return db.createTable (“capital”, function () {this.primaryKey (“id”); this .population (“intreg”); this.name (String); this.founded (Data); this.foreignKey (“stateId”, “state”, {key: “id”, onDelete: “CASCADE”});} );}); }, // jos este apelat atunci cand va migrati baza de date in jos: functie (db) {// drop tabelele de stare si capital returneaza db.dropTable (“capital”, “

  4. Rulati migrarea

    patio migrate -v –camelize -u “<DB_CONNECTION_STRING>” -d ./migration
  5. Conectati-va si interogati!

    var patio = require (“patio”); // set camelize = true daca doriti coloanele bazei de date snakecase ca patio camelcase.camelize = true; patio.connect (“pg: //[email protected]: 5432 / readme_example”); // definiti un model de stat cu o relatie cu capital var State = patio.addModel (“state”). oneToOne (“capital”); // definiti un model de capital cu o relatie cu stat var Capital = patio.addModel (“capital”). manyToOne (“state”); // salvarea unui stat. : “Lincoln”, infiintat: data noua (1856, 0, 1), populatie: 258379}}) .chain (functie () {// salveaza un Capital return Capital.save ({nume: “Austin”, fondat: data noua (1835, 0, 1), populatie: 790390, // definiti statul inline al statului: {nume: “Texas”, populatie: 25674681, fondat: data noua (1845, 11, 29)}}); }) .chain (function () {// Interogati toate starile dupa nume return State.order („nume”). forEach (function (state) {// Obtineti returnarea capitalului asociat state.capital.chain (functie (capital) ) {console.log („capitalul% s este% s.”, state.name, capital.name);});});}) .chain (process.exit, functie (err) {console.log (err ) process.exit (1);}); lant (functie (capital) {console.log (“capitalul% s este% s.”, stat.nume, capital.nume);}); }); }) .chain (process.exit, function (err) {console.log (err) process.exit (1);}); lant (functie (capital) {console.log (“capitalul% s este% s.”, state.name, capital.name);}); }); }) .chain (process.exit, function (err) {console.log (err) process.exit (1);});

Ghiduri

  • Migratii
  • Modele
    • Asociatiile
    • Mostenire
    • Validare
    • Pluginuri
  • Interogare
  • DDL
  • Logare

Caracteristici

  • Documentare cuprinzatoare cu exemple.
  • > 80% acoperire test
  • Suport pentru URI-uri de conexiune
  • Baze de date acceptate
    • MySQL
    • Postgres
    • Tura rosie
  • Modele
    • Asociatiile
    • Mostenire
    • Validare
    • Pluginuri
  • Extensii simple de adaptor
  • Migratii
    • Bazat pe intreg si Timestamp.
  • API de interogare puternic
  • Tranzactii cu
    • Savepoints
    • Nivele de izolare
    • Comitete in doua faze
  • Distribuirea tipului de date SQL
  • Operatiuni complete de baze de date CRUD
    • createTable
    • alterTable
    • dropTable
    • introduce
    • multiInsert
    • Actualizati
    • elimina
    • interogare