【问题标题】:Transform datetime in YYYY-MM-DD HH:MM[:SS[.SSSSSS]]在 YYYY-MM-DD HH:MM[:SS[.SSSSSS]] 中转换日期时间
【发布时间】:2017-09-19 01:50:40
【问题描述】:

我收到此错误:

Could not parse 'event_date' as a timestamp. Required format is YYYY-MM-DD HH:MM[:SS[.SSSSSS]]

当我尝试插入一行时来自 BigQuery。

这是我的代码:

bigquery_client = bigquery.Client.from_service_account_json(CREDENTIALS_BIGQUERY, 'roas-164016')
dataset = bigquery_client.dataset(BQ_LOGS_DATASET_NAME)
table = dataset.table(BQ_EMAIL_SENDS_TABLE_NAME)

data = {}
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
data['send_id'] = 'test'
data['uid'] = 'test'
data['account_id'] = 'test'
data['subaccount_id'] = 'test'
data['event_id'] = 'test'
data['event_date'] = now
data['html_content'] = 'test'
data['campaign_name'] = 'test'
data['subject'] = 'test'
data['send_type'] = 'test'

json_data = json.dumps(data)

data =  json.loads(json_data)
table.reload()

rows = [data]
errors = table.insert_data(rows)

如何修复日期格式?

【问题讨论】:

  • @cricket_007 我在加载和转储中看到的唯一影响是将字符串转换为 unicode ......当然这不是最干净的方法
  • 我不熟悉 BigQuery,所以这可能是一个愚蠢的问题 - 它是否假设您的列按特定顺序排列?
  • rows(元组列表)- 要插入的行数据。每个元组应包含当前表中每个架构字段的数据,并且与架构字段的顺序相同。

标签: python python-2.7 google-bigquery


【解决方案1】:

如果这就是你真正需要的。

now = datetime.now().strftime("%Y-%m-%d %H:%M[:%S[.%f]]")

更可能的是,方括号表示可选部分。所以:

now = datetime.now().strftime("%Y-%m-%d %H:%M")

now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

now = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")

【讨论】:

  • 如果它是可选的,那么问题已经有正确的格式
  • 很好奇 - 究竟是什么问题?接受的答案(看起来)与问题相比没有什么新东西:o)你能在这里阐明一下吗?
【解决方案2】:

将您的日期格式化为 YYYY-MM-DD HH:MM:SS 表示月日时分秒应为两位数格式。

样本:

2018-02-16 04:39:05 正确

2018-2-16 4:39:5 错误

编码愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多