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 注入。
我将 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 注入。