9404803 发表于 2018-9-20 10:32:20

dynamodb golang query one Item

// +build example  

  
package main
  

  
import (
  //    "flag"
  "fmt"
  "github.com/aws/aws-sdk-go/aws"
  "github.com/aws/aws-sdk-go/aws/session"
  "github.com/aws/aws-sdk-go/service/dynamodb"
  "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
  "os"
  "time"
  
)
  

  
func exitWithError(err error) {
  fmt.Fprintln(os.Stderr, err)
  os.Exit(1)
  
}
  

  
func main() {
  cfg := Config{}
  if err := cfg.Load(); err != nil {
  exitWithError(fmt.Errorf("failed to load config, %v", err))
  }
  

  // Create the config specifiing the Region for the DynamoDB table.
  // If Config.Region is not set the region must come from the shared
  // config or AWS_REGION environment variable.
  awscfg := &aws.Config{}
  if len(cfg.Region) > 0 {
  awscfg.WithRegion(cfg.Region)
  }
  

  // Create the session that the DynamoDB service will use.
  sess, err := session.NewSession(awscfg)
  if err != nil {
  exitWithError(fmt.Errorf("failed to create session, %v", err))
  }
  

  // Create the DynamoDB service client to make the query request with.
  svc := dynamodb.New(sess)
  

  // Build the query input parameters
  params := &dynamodb.ScanInput{
  TableName: aws.String(cfg.Table),
  }
  if cfg.Limit > 0 {
  params.Limit = aws.Int64(cfg.Limit)
  }
  fmt.Println("params is: ", params)
  // Make the DynamoDB Query API call
  result, err := svc.Scan(params)
  if err != nil {
  exitWithError(fmt.Errorf("failed to make Query API call, %v", err))
  }
  

  items := []Item{}
  

  // Unmarshal the Items field in the result value to the Item Go type.
  err = dynamodbattribute.UnmarshalListOfMaps(result.Items, &items)
  if err != nil {
  exitWithError(fmt.Errorf("failed to unmarshal Query result items, %v", err))
  }
  

  // Print out the items returned
  for i, item := range items {
  fmt.Printf("%d:UserID: %d, Time: %s Msg: %sCount: %d SecretKey:%s DeviceId: %s CampaginId:%s \n   ", i, item.UserID, item.Time, item.Msg, item.Count, item.SecretKey, item.DeviceId, item.CampaginId)
  //fmt.Printf("\tNum Data Values: %d\n", len(item.Data))
  
    }
  

  /*    //1231241deviceid
  params_del := &dynamodb.ScanInput{
  TableName: aws.String(cfg.Table),
  

  }
  */
  //query oneItemdemo
  params_get := &dynamodb.GetItemInput{
  Key: map*dynamodb.AttributeValue{
  "deviceid": {
  S: aws.String("1231241"),
  },
  },
  TableName: aws.String(cfg.Table), // Required
  
    }
  

  resp, err_get := svc.GetItem(params_get)
  oneItem := Item{}
  if err_get == nil {
  // resp is now filled
  fmt.Printf("resp type is %T \n ", resp.Item)
  err = dynamodbattribute.UnmarshalMap(resp.Item, &oneItem)
  if err == nil {
  fmt.Printf("UserID: %d, Time: %s Msg: %sCount: %d SecretKey:%s DeviceId: %s CampaginId:%s \n   ", oneItem.UserID, oneItem.Time, oneItem.Msg, oneItem.Count, oneItem.SecretKey, oneItem.DeviceId, oneItem.CampaginId)
  } else {
  fmt.Println(" Unmarshal err :", err)
  }
  //fmt.Println("convert to Struct objerr is ", err, "oneItem is:", oneItem)
  } else {
  fmt.Println("GetItem err is: ", err_get)
  }
  

  
}
  

  
type Item struct {
  UserID   int       // Hash key, a.k.a. partition key
  Time       time.Time // Range key, a.k.a. sort ke
  Msg      string    `dynamo:"Message"`
  Count      int       `dynamo:",omitempty"`
  SecretKeystring    `dynamo:"-"` // Ignored
  DeviceId   string    `dynamo:"deviceid"`
  CampaginId string    `dynamo:"campid"`
  
}
  

  
type Config struct {
  Tablestring // required
  Region string // optional
  Limitint64// optional
  

  
}
  

  
func (c *Config) Load() error {
  //flag.Int64Var(&c.Limit, "limit", 0, "Limit is the max items to be returned, 0 is no limit")
  //flag.StringVar(&c.Table, "table", "", "Table to Query on")
  //flag.StringVar(&c.Region, "region", "", "AWS Region the table is in")
  //flag.Parse()
  c.Limit = 100
  c.Region = "ap-southeast-1"
  c.Table = "xxx_your_table_name"
  if len(c.Table) == 0 {
  //    flag.PrintDefaults()
  return fmt.Errorf("table name is required.")
  }
  

  return nil
  
}


页: [1]
查看完整版本: dynamodb golang query one Item