【问题标题】:keyerror when trying to insert datetime into Postgresql (pg8000)尝试将日期时间插入 Postgresql (pg8000) 时出现键错误
【发布时间】:2020-11-25 02:31:06
【问题描述】:

我正在尝试将日期时间插入 pgsql

f'UPDATE userdata SET claimed = {fclaim} WHERE userid = {user.id}'

下面是 fclaim 变量的制作方法

   nextclaim = datetime.datetime.now() + datetime.timedelta(hours=24)
   
   fclaim = nextclaim + datetime.timedelta(hours=24)

当我尝试将 fclaim 插入 postgresql 时,出现以下错误

  File "/home/server/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 83, in wrapped
    ret = await coro(*args, **kwargs)
  File "/home/server/Documents/blutonium/extensions/points.py", line 162, in daily
    isClaimed = blutapi.getclaimed(ctx.author)
  File "/home/server/Documents/blutonium/blutapi.py", line 445, in getclaimed
    db.run(sql)
  File "/home/server/.local/lib/python3.6/site-packages/pg8000/core.py", line 954, in run
    self._run_cursor.execute(sql, params, stream=stream)
  File "/home/server/.local/lib/python3.6/site-packages/pg8000/core.py", line 351, in execute
    self._c.execute_unnamed(self, operation, args)
  File "/home/server/.local/lib/python3.6/site-packages/pg8000/core.py", line 1262, in execute_unnamed
    args = make_args(vals)
  File "/home/server/.local/lib/python3.6/site-packages/pg8000/core.py", line 213, in make_args
    return tuple(vals[p] for p in placeholders)
  File "/home/server/.local/lib/python3.6/site-packages/pg8000/core.py", line 213, in <genexpr>
    return tuple(vals[p] for p in placeholders)
KeyError: '37' 

在 ubuntu 20.04 上使用 python 3.6.11

【问题讨论】:

  • 请展示一个完整的例子来说明你如何传递值。另外,自己格式化字符串通常不是一个好主意(SQL注入问题)。您应该使用formatnumeric 显示的参数传递。或在dbapiparamstyle 下列出的其他人之一

标签: python postgresql keyerror pg8000


【解决方案1】:

the docs 之后,这是一个使用 pg8000 执行 UPDATE 的示例:

conn.run(
    "UPDATE userdata SET claimed = :fclaim WHERE userid = :user_id", fclaim=fclaim,
    user_id=user.id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2018-03-15
    • 2014-11-21
    相关资源
    最近更新 更多