postgresql使用python

时间:2016-10-04 03:20:54

标签: python postgresql timestamp psycopg2

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

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

1 个答案:

答案 0 :(得分:4)

如果您检查第一个查询,它会指出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注入等许多可能的问题。