如何通过python将current_timestamp插入Postgres

Max*_*Max 43 python postgresql datetime

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

a_h*_*ame 65

时间戳没有"格式".

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

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

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

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

 INSERT INTO some_table 
 (ts_column) 
 VALUES 
 (TIMESTAMP '2011-05-16 15:36:38');
Run Code Online (Sandbox Code Playgroud)

是的,这是关键字,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'));
Run Code Online (Sandbox Code Playgroud)


Eug*_*ash 37

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

from datetime import datetime

dt = datetime.now()
cur.execute('INSERT INTO some_table (somecol) VALUES (%s)', (dt,))
Run Code Online (Sandbox Code Playgroud)

这里列出更多可以适应SQL的Python类型(并在执行查询时作为Python对象返回).

  • 你应该避免传递一个表示本地时间的天真日期时间对象:它可能是不明确的,并且数据库连接可能使用不同的时区.使用一个有意识的日期时间对象,例如`datetime.now(timezone.utc)`,并确保在db端使用"带时区的时间戳". (7认同)

sch*_*gel 7

只需使用'现在'

http://www.postgresql.org/docs/8.0/static/datatype-datetime.html

  • `now`与`current_timestamp`完全相同 (4认同)
  • OP 明确询问如何*通过 Python* 执行此操作。 (2认同)