postgresql 如何通过python将current_timestamp插入Postgres

kadbb459  于 12个月前  发布在  PostgreSQL
关注(0)|答案(8)|浏览(171)

我需要插入行到PG的字段之一是日期和时间与时间戳,这是事件的时间,所以我不能使用-->当前_时间戳功能的Postgres在插入的时候,所以我怎么能然后插入的时间和日期,我收集到PG行之前在相同的格式,因为它会被创建的当前_时间戳在那个时间点。

unhi4e5o

unhi4e5o1#

如果你使用psycopg2(可能还有其他客户端库),你可以简单地将Python datetime对象作为参数传递给SQL查询:

from datetime import datetime, timezone

dt = datetime.now(timezone.utc)
cur.execute('INSERT INTO mytable (mycol) VALUES (%s)', (dt,))

字符串
(This假设在数据库端使用timestamp with time zone类型。)
这里列出了更多可以适应SQL的Python类型(并在执行查询时作为Python对象返回)。

1cklez4t

1cklez4t2#

时间戳没有“格式”。
处理时间戳的推荐方法是使用PreparedStatement,你只需在SQL中传递一个占位符,然后通过编程语言的API传递一个“真实的”对象。因为我不知道Python,我不知道它是否支持PreparedStatements,以及它的语法如何。
如果你想把一个时间戳文本放到你生成的SQL中,你需要在指定值时遵循一些格式规则(文本确实有格式)。
Ivan的方法会起作用,尽管我不能100%确定它是否取决于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'));

rslzwgfq

rslzwgfq4#

日期和时间输入几乎可以接受任何合理的格式,包括ISO 8601、SQL兼容、传统的POSTGRES等。对于某些格式,日期输入中的月、日和年的顺序是不明确的,并且支持指定这些字段的预期顺序。
换句话说:只要写任何东西,它就会工作。
或者用所有明确的格式检查这个表。

ggazkfy8

ggazkfy85#

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

pb3skfrl

pb3skfrl6#

from datetime import datetime as dt

字符串
然后在你的代码中使用这个:

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

5anewei6

5anewei67#

strftime用于datetime物镜:

x.strftime(r'%Y-%m-%d %H:%M:%S')

字符串
这里的主要思想是将datetime转换为Postgres timestamp without timezone,在插入时应该是字符串。

oxosxuxt

oxosxuxt8#

只是用
Now()

当前_时间戳
我更喜欢后者,因为我不喜欢有额外的括号,但这只是个人喜好。

相关问题