Golang でデータベース行からマップを作成する方法
database/sql パッケージでは、Rows.Scan() 関数にクエリ内の列に一致する特定の数のパラメータ。これは、未知のデータセットまたはさまざまなデータセットを操作する場合に制限となる可能性があります。より一般的な方法でデータベース行からマップを作成するには、次のアプローチを検討してください。
sqlx ライブラリの使用
sqlx ライブラリは、database/sql の代替手段を提供します。データベースからマップを作成するタスクを簡素化するパッケージrows:
// Define the function to create a map from rows func RowsToMap(rows *sql.Rows) ([]map[string]interface{}, error) { // Define the list to store the data data := []map[string]interface{}{} // Get the column names columns, err := rows.Columns() if err != nil { return nil, err } // Create a slice of interface{} to hold the data for each row values := make([]interface{}, len(columns)) // Create a slice of pointers to the values valuePtrs := make([]interface{}, len(columns)) for i, _ := range values { valuePtrs[i] = &values[i] } // Loop through the rows and add to the data list for rows.Next() { // Scan the row into the values slice err = rows.Scan(valuePtrs...) if err != nil { return nil, err } // Create a map to hold the data for the row row := make(map[string]interface{}) // Add the column names and values to the map for i, column := range columns { row[column] = values[i] } // Add the row map to the data list data = append(data, row) } return data, nil }
Usage:
// Execute a query and get the rows rows, err := db.Query("SELECT * FROM mytable") if err != nil { // Handle error } // Create a map from the rows data, err := RowsToMap(rows) if err != nil { // Handle error } // Use the data as needed for _, row := range data { fmt.Println(row) }
このアプローチにより、事前に列名や型を指定せずにデータベース行からマップを作成できます。
以上がGolang でデータベースの行をマップに効率的にマッピングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。