如何通过python将current_timestamp插入Postgres

时间:2011-05-16 13:34:03

标签: python postgresql datetime

我需要在PG中插入行,其中一个字段是日期和时间,带有时间戳,这是事件发生的时间,所以我不能使用 - > postgres在插入时的current_timestamp函数,那么如何将之前收集的时间和日期插入到pg行中,其格式与current_timestamp在该时间点创建的格式相同。

7 个答案:

答案 0 :(得分:60)

时间戳没有“格式”。

处理时间戳的推荐方法是使用PreparedStatement,您只需在SQL中传递占位符,并通过编程语言的API传递“真实”对象。由于我不懂Python,我不知道它是否支持PreparedStatements以及它的语法如何。

如果要将时间戳文字放入生成的SQL中,则在指定值时需要遵循一些格式规则(文字确实具有格式)。

Ivan的方法会起作用,虽然我不确定它是否依赖于PostgreSQL服务器的配置。

用于指定时间戳文字的配置(和语言)独立解决方案是ANSI SQL标准:

 INSERT INTO some_table 
 (ts_column) 
 VALUES 
 (TIMESTAMP '2011-05-16 15:36:38');

是的,这是关键字TIMESTAMP,后跟以ISO样式格式化的时间戳(TIMESTAMP关键字定义了该格式)

另一种解决方案是使用to_timestamp()函数,您可以在其中指定输入文字的格式。

 INSERT INTO some_table 
 (ts_column) 
 VALUES 
 (to_timestamp('16-05-2011 15:36:38', 'dd-mm-yyyy hh24:mi:ss'));

答案 1 :(得分:32)

如果您使用psycopg2(可能还有其他一些客户端库),您只需将Python datetime对象作为parameter传递给SQL查询:

from datetime import datetime

dt = datetime.now()
cur.execute('INSERT INTO some_table (somecol) VALUES (%s)', (dt,))

here列出了更多可以适应SQL的Python类型(并在执行查询时作为Python对象返回){。{3}}。

答案 2 :(得分:7)

答案 3 :(得分:2)

  

几乎任何合理的格式都接受日期和时间输入,   包括ISO 8601,SQL兼容,传统POSTGRES等。   对于某些格式,日期输入中的月,日和年的排序是   含糊不清,并且支持指定预期的排序   这些领域。

换句话说:只需写下任何内容即可。

或者使用所有明确的格式检查this table

答案 4 :(得分:1)

当然,只需为格式为'2011-05-16 15:36:38'的格式传递该时间戳列的字符串值(您还可以在其中附加时区,如'PST')。 PostgreSQL会自动将字符串转换为时间戳。见http://www.postgresql.org/docs/9.0/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT

答案 5 :(得分:-1)

from datetime import datetime as dt

然后在您的代码中使用它:

cur.execute('INSERT INTO my_table (dt_col) VALUES (%s)', (dt.now(),))

答案 6 :(得分:-3)

只需使用

  

现在()

  

CURRENT_TIMESTAMP

我更喜欢后者,因为我不喜欢额外的括号,但这只是个人偏好。