Entgo中怎么使用原生sql查询
时间: 2023-12-10 10:36:52 浏览: 345
在 Entgo 中,可以使用 `ent.Querier` 接口提供的 `Raw` 方法执行原生 SQL 查询。`Raw` 方法接受一个原始的 SQL 查询语句和查询参数,返回一个 `ent.Rows` 对象,可以通过该对象来获取查询结果。
以下是一个使用原生 SQL 查询的示例代码:
```go
import (
"context"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
)
// ...
func main() {
// 初始化 ent.Client
client, err := ent.Open(dialect.SQLite, "file:ent?cache=shared&_fk=1")
if err != nil {
log.Fatalf("failed opening connection to sqlite: %v", err)
}
defer client.Close()
// 创建一个新的上下文
ctx := context.Background()
// 执行原生 SQL 查询
rows, err := client.Query(ctx, sql.From("users").Where(sql.EQ("age", 30)))
if err != nil {
log.Fatalf("failed querying users: %v", err)
}
defer rows.Close()
// 遍历查询结果
for rows.Next() {
var id int
var name string
var age int
if err := rows.Scan(&id, &name, &age); err != nil {
log.Fatalf("failed scanning row: %v", err)
}
fmt.Printf("id=%d, name=%s, age=%d\n", id, name, age)
}
}
```
在上面的示例代码中,我们使用 `client.Query` 方法执行了一个查询,查询语句为 `sql.From("users").Where(sql.EQ("age", 30))`,表示查询 `users` 表中所有年龄为 30 岁的记录。`Query` 方法返回一个 `ent.Rows` 对象,我们可以通过其 `Next` 和 `Scan` 方法来遍历查询结果,获取每一行的数据。
阅读全文