內(nèi)置SQL支持
目前僅為alpha階段,當(dāng)demo體驗(yàn)而已
V語(yǔ)言有一個(gè)內(nèi)置的ORM,目前只支持postgres和mysql,后續(xù)支持sqlite
V ORM的好處有:
- 針對(duì)不同的數(shù)據(jù)庫(kù),統(tǒng)一的一套語(yǔ)法,這樣遷移到其他數(shù)據(jù)庫(kù)變得更容易
- SQL語(yǔ)法內(nèi)置在V語(yǔ)言的語(yǔ)法中,不需要學(xué)習(xí)其他的語(yǔ)法
- 安全,不可以通過注入生成SQL語(yǔ)句
- 編譯時(shí)檢查,語(yǔ)法錯(cuò)誤在編譯時(shí)就可以被捕捉到
- 簡(jiǎn)單易讀,不再需要手工解析結(jié)果和構(gòu)造對(duì)象
import pg
struct Customer { // 數(shù)據(jù)庫(kù)表對(duì)應(yīng)到結(jié)構(gòu)體,結(jié)構(gòu)體名目前要求跟表名一致
id int // 第一個(gè)字段必須是一個(gè)整型的id字段
name string
nr_orders int
country string
}
db := pg.connect(db_name, db_user) //連接數(shù)據(jù)庫(kù),返回DB類型
// select count(*) from Customer
nr_customers := db.select count from Customer //db.后面的就可以直接寫SQL語(yǔ)句,并返回結(jié)果集,數(shù)組
println('number of all customers: $nr_customers')
// V syntax can be used to build queries
// db.select返回一個(gè)數(shù)組
uk_customers := db.select from Customer where country == 'uk' && nr_orders > 0
println(uk_customers.len)
for customer in uk_customers {
println('$customer.id - $customer.name')
}
customer := db.select from Customer where id == 1 limit 1
println('$customer.id - $customer.name')
//插入數(shù)據(jù)到數(shù)據(jù)庫(kù)
new_customer := Customer{name: 'Bob', nr_orders: 10}
db.insert(new_customer)
更詳細(xì)的SQL內(nèi)容,可以參考pg章節(jié)