【问题标题】:postgresql insert timestamp error with pythonpostgresql用python插入时间戳错误
【发布时间】:2016-10-04 03:20:53
【问题描述】:

我将 psycopg2 用于 postgresql。这是我的sn-p:

a = "INSERT INTO tweets (Time) VALUES (%s);" % (datetime.now(),)

cursor.execute(a)

这不起作用并给我一个错误:

ProgrammingError: syntax error at or near "20"
LINE 1: INSERT INTO tweets (Time) VALUES (2016-10-03 20:14:49.065092...

但是,如果我这样运行:

cursor.execute("INSERT INTO tweets (Time) VALUES (%s);", (datetime.now(),))

它有效。我想知道这两个表达式有什么区别,第一个有什么问题。我可以使用第一个结构来执行此功能吗?

【问题讨论】:

  • 第一个使用Python字符串替换。第二种使用 Psycopg 参数传递,是唯一推荐的一种。

标签: python postgresql timestamp psycopg2


【解决方案1】:

如果您检查第一个查询,它会声明 INSERT INTO tweets (Time) VALUES (2016-10-03 20:14:49.065092...,这意味着它会尝试使用未加引号的值作为时间,但这是行不通的。

如果你真的想使用你的第一种方法,你必须引用值:

a = "INSERT INTO tweets (Time) VALUES ('%s');" % (datetime.now(),)
cursor.execute(a)

我建议您使用第二种方法,其中客户端库处理所有引号,并且通常可以防止很多可能的问题,例如 SQL 注入。

【讨论】:

  • 不建议使用第一种方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 2013-11-21
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多