Is it possible to save datetime to DynamoDB?

前端 未结 8 1331
清酒与你
清酒与你 2021-01-17 09:46

I have the next code:

users_table = Table(users_table_name, connection=Core.aws_dynamodb_connection)
users_table.put_item(data={
  \"login\": login,
  \"pass         


        
相关标签:
8条回答
  • 2021-01-17 09:47

    I'm not sure why datetime isn't supported in DynamoDB, or in fact I have no experience in it neither.

    But if you're so insisted in not converting the datetime to string like people suggested, you can convert the datetime to timestamp, and so you can compare with it.

    updated

    And you may want to read this SO Question, seemed like numeric comparison is the preferred way.

    0 讨论(0)
  • 2021-01-17 09:50

    If you want to use date to find users, you can simply invoke date() function. Like this:

    ...
    users_table = Table(users_table_name, connection=Core.aws_dynamodb_connection)
    current = datetime.now()
    users_table.put_item(data={
      "login": login,
      "password": hashlib.sha256(password.encode("utf-8")).hexdigest(),
      "profile": profile,
      # here use a different name for the entry
      "registration_time": current
      "registration_date": current.date()
    })
    ...
    
    0 讨论(0)
  • 2021-01-17 09:51

    According to alejandro-franco response .isoformat() make the trick.

    Just tested and this a working example:

    CustomerPreferenceTable.put_item(
        Item={
            "id": str(uuid4()),
            "validAfter": datetime.utcnow().isoformat(),
            "validBefore": (datetime.utcnow() + timedelta(days=365)).isoformat(),
            "tags": ["potato", "eggplant"]
        }
    )
    
    0 讨论(0)
  • 2021-01-17 09:57

    Okay, I see that DynamoDB does not support any date types. So the only solution is to use unix-like time as integer, or save date as string.

    enter image description here

    0 讨论(0)
  • 2021-01-17 09:57

    Reading the documentation lately, I found the right link to the documentation here. The recommended way to store date and time data in DynamoDB is using ISO 8601 strings. so the data type is just string.

    0 讨论(0)
  • 2021-01-17 10:00

    old post but maybe still interesting ..

    What you can do and how it worked for me:

    import datetime
    from datetime import datetime
    
    ...
    
    now = datetime.now()
    x = now.strftime("%m/%d/%Y, %H:%M:%S")
    
     table.put_item(
               Item={
                   'Index': Index,
               
                   'Stamp': x,
                   
                }
            )
    
    

    And with adaption to the code above:

    import datetime
    from datetime import datetime
    
    ...
    
    now = datetime.now()
    x = now.strftime("%m/%d/%Y, %H:%M:%S")
    
    users_table = Table(users_table_name, connection=Core.aws_dynamodb_connection)
    users_table.put_item(data={
      "login": login,
      "password": hashlib.sha256(password.encode("utf-8")).hexdigest(),
      "profile": profile,
      "registration_date": x, 
    })   
    

    My Output

    0 讨论(0)
提交回复
热议问题