sqlgen genereaza instructiuni SQL si functii de asistenta pentru baze de date din structurile dvs. Go. Poate fi folosit in locul unui ORM simplu sau SQL scris manual. Consultati directorul demo pentru exemple.

Instalare

Instalati sau actualizati cu aceasta comanda:

accesati -u github.com/drone/sqlgen

Utilizare

Utilizarea sqlgen: -tip tip sir de generat; Numele fisierului de intrare a sirului de fisiere obligatoriu; obligatoriu -o sir de iesire nume fisier -pkg sir de iesire nume pachet -db sir dialect sql; sqlite, postgres, mysql -schema genereaza schema si interogari sql; implicit true -funcs genereaza functii de ajutor sql; implicit adevarat

Tutorial

In primul rand, sa incepem cu o structura de utilizator simpla in user.go:

tastati Structura utilizatorului {ID int64 Sir de conectare Sir de e-mail}

Putem rula urmatoarea comanda:

sqlgen -file user.go -type User -pkg demo

Instrumentul genereaza urmatorul cod generat:

func ScanUser (rand * sql.Row) (* Utilizator, eroare) {var v0 int64 var v1 string var v2 string err: = row.Scan (& v0, & v1, & v2,) if err! = nil {return nil, err} v: = & Utilizator {} v.ID = v0 v.Login = v1 v.Email = v2 return v, nil} const CreateUserStmt = `CREATE TABLE IF NOT EXISTS users (user_id INTEGER, user_login TEXT, user_email TEXT); `const SelectUserStmt =` SELECT user_id, user_login, user_email FROM users` const SelectUserRangeStmt = `SELECT user_id, user_login, user_email FROM users LIMIT? DECALAJ ? `// mai multe functii si instructiuni sql nu sunt afisate

Acesta este un inceput minunat, dar daca vrem sa specificam cheile primare, dimensiunile coloanelor si multe altele? Acest lucru poate fi realizat prin adnotarea codului dvs. folosind etichete Go. De exemplu, putem eticheta campul ID pentru a indica faptul ca este o cheie principala si va creste automat:

tastati Structura utilizator {- ID int64 + ID int64 `sql:” pk: true, auto: true “` Sir de conectare Sir de e-mail}

Aceste informatii permit instrumentului sa genereze instructiuni SQL mai inteligente:

CREATI TABEL DACA NU EXISTA utilizatori (-user_id INTEGER + user_id INTEGER PRIMARY KEY AUTOINCREMENT, user_login TEXT, user_email TEXT);

Inclusiv instructiuni SQL pentru a selecta, insera, actualiza si sterge date folosind cheia principala:

const SelectUserPkeyStmt = `SELECT user_id, user_login, user_email WHERE user_id =? `const UpdateUserPkeyStmt =` UPDATE utilizatori SET user_id =? , user_login =? , user_email =? UNDE user_id =? `const DeleteUserPkeyStmt =` STERGERE DE LA utilizatori UNDE user_id =? `

Putem face acest pas mai departe si putem adnota indexuri. In exemplul nostru, probabil ca dorim sa ne asiguram ca campul user_login are un index unic:

tastati Structura utilizatorului {ID int64 `sql:” pk: true, auto: true “` – Sir de conectare + Sir de conectare `sql:” unic: user_login “` Sir de e-mail}

Aceste informatii instruiesc instrumentul sa genereze urmatoarele:

const CreateUserLogin = „CREATI UNICEX INDEX DACA NU EXISTA user_login ON utilizatori (user_login)

Instrumentul presupune, de asemenea, ca intentionam probabil sa preluam date din baza de date folosind acest index.

follada real coños calientes
videos porno peruano fiestas porno
follate a mi novia porno tv
porno en cine convencional porni
porno trans amas de casa follando
cine para adultos gratis pornox
miriam sanchez videos porno española follando
peliculas eroticas gratis en español porno fiestas
maduritas cachondas incesto x
abuela porno largeporntube
videos porno casero españa tias corriendose
videos eroticos italianos todoporno
casadas muy putas pilladas desnudas
folladas extremas madresxxx
follada en tanga maduras folladoras
maduras peludas españolas maduras en la playa
incesto subtitulado español mujer masturbandose
follar abuelas masturbaciones
gordibuenas españolas p0rno
porno gratis anal michelle jenner desnuda

Prin urmare, instrumentul va genera automat urmatoarele interogari:

const SelectUserLoginStmt = `SELECT user_id, user_login, user_email WHERE user_login =? `const UpdateUserLoginStmt =` UPDATE utilizatori SET user_id =? , user_login =? , user_email =? UNDE user_login =? `const DeleteUserLoginStmt =` STERGERE DE LA utilizatori UNDE user_login =? `

Cuibarit

Structurile imbricate Go pot fi aplatizate intr-o singura tabela de baze de date. De exemplu, avem un utilizator si o adresa cu o relatie de la unu la unu. In unele cazuri, este posibil sa preferam sa ne normalizam datele si sa le stocam intr-un singur tabel, evitand imbinarile inutile.

tastati Structura utilizatorului {ID int64 `sql:” pk: true “` Sir de conectare Sir de e-mail + Adresa * Adresa} tastati Structura de adresa {Sir de oras Sir de stat Sir zip `sql:” index: user_zip “`}

Relatia de mai sus este aplatizata intr-un singur tabel (vezi mai jos). Cand datele sunt preluate din baza de date, structura imbricata este restaurata.

CREATI TALBE DACA NU EXISTA utilizatori (user_id INTEGER KEY PRIMARY AUTO_INCREMENT, user_login TEXT, user_email TEXT, user_addr_city TEXT, user_addr_state TEXT, user_addr_zip TEXT);

Codificare JSON

Este posibil ca unele tipuri din struct sa nu aiba echivalenti nativi in baza de date, cum ar fi sirul []. Aceste valori pot fi combinate si stocate ca JSON in baza de date.

tastati Structura utilizatorului {ID int64 `sql:” pk: true “` Sir de autentificare Sir de e-mail + Eticheta [] sir `sql:” codificare: json “}

Dialecte

Puteti specifica unul dintre urmatoarele dialecte SQL atunci cand va generati codul: postgres, mysql si sqlite. Valoarea implicita este sqlite.

sqlgen -file user.go -type User -pkg demo -db postgres

Du-te Genereaza

Exemplu de utilizare cu go: generate:

pachet demo // go: generate sqlgen -file user.go -type User -pkg demo -o user_sql.go tip User struct {ID int64 `sql:” pk: true, auto: true “` Sir de conectare `sql:” unic : user_login “` Sir de e-mail `sql:” dimensiune: 1024 “` Sir de avatar}

Repere

Acest instrument demonstreaza castiguri de performanta, desi mici, fata de pachetele ORM usoare, cum ar fi sqlx si meddler. De-a lungul timpului intentionez sa extind criteriile de referinta pentru a include pachete ORM suplimentare.

Pentru a rula parametrii de referinta ai proiectului:

go get. / … go generate. / … go build cd bench go test -bench = Bench

Exemplu de selectare a unui singur rand:

BenchmarkMeddlerRow-4 30000 42773 ns / op BenchmarkSqlxRow-4 30000 41554 ns / op BenchmarkSqlgenRow-4 50000 39664 ns / op

Selectarea mai multor randuri:

BenchmarkMeddlerRows-4 2000 1025218 ns / op BenchmarkSqlxRows-4 2000 807213 ns / op BenchmarkSqlgenRows-4 2000 700673 ns / op

credite

Acest instrument a fost inspirat de scaneo.