put
def put[A: Schema](tableName: String, a: A): DynamoDBQuery[A, Option[A]] = ???
The put operation is used to insert or replace an item in a table.
for {
  _ <- DynamoDBQuery.put("person", Person("1", "John", 21))
        .where(Person.id.notExists) // a ConditionExpression
        .execute
} yield ()
put query operations​
<PUT_QUERY>
  .returns(<ReturnValues>) // ReturnValues.AllOld | ReturnValues.None <default>
  .where(<ConditionExpression>) // eg Person.id.notExists
Using put with Top level traits using discriminatorName annotation​
When using a top level sealed trait with @discriminatorName annotation, it must be provided explicitly to the put
to ensure that discriminator field is encoded.
@discriminatorName("invoiceType")
sealed trait Invoice
final case class PreBilledInvoice(/* ... */) extends Invoice
final case class BilledInvoice(/* ... */) extends Invoice
for {
  _ <- DynamoDBQuery.put[Invoice]("invoice", BilledInvoice(/* ... */)).execute // OK - discriminator encoded
  _ <- DynamoDBQuery.put[BilledInvoice]("invoice", BilledInvoice(/* ... */)).execute // WRONG - discriminator not encoded
} yield ()