postgresql 插入时间戳错误 python

postgresql insert timestamp error with python

我将 psycopg2 用于 postgresql。这是我的片段:

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(),))

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

如果您检查第一个查询,它会显示 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 注入。