使用 psycopg2 在 postgres 中调用 CURRENT_TIMESTAMP()
calling CURRENT_TIMESTAMP() in postgres using psycopg2
我有一个用于存储两个时间戳的 postgresql table。第一个时间戳在订单发起时插入,第二个时间戳在订单状态返回时更新。
CREATE TABLE IF NOT EXISTS orders
(
order_id SERIAL PRIMARY KEY,
purchase_id INTEGER NOT NULL,
requested_amount INTEGER NOT NULL,
order_submitted_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
order_confirmed_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
confirm_num INTEGER NULL
);
我的理解是 TIMESTAMP
是类型,而 CURRENT_TIMESTAMP
是被调用以创建时间戳的函数。
我的困惑在于:当我插入和更新一行时,我需要做任何事情来调用 CURRENT_TIMESTAMP
函数还是自动调用
'INSERT INTO orders (purchase_id, requested_amount) \
VALUES (%s, %s) RETURNING order_id;',
(purchId, requestedAmount)
'UPDATE orders SET (confirm_num) VALUES (%s) WHERE order_id = %s',
(confirm_num, row_id)
当您插入一行并且不使用 default
选项指定字段值时,Postgres 将自动插入 current_timestamp
。
更新行时,如果要更改值,则必须明确指定值。所以你的 table 应该是这样的:
CREATE TABLE IF NOT EXISTS orders
(
order_id SERIAL PRIMARY KEY,
purchase_id INTEGER NOT NULL,
requested_amount INTEGER NOT NULL,
order_submitted_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
order_confirmed_date TIMESTAMP,
confirm_num INTEGER NULL
);
并更新查询:
'UPDATE orders \
SET (order_confirmed_date, confirm_num) = (current_timestamp, %s) \
WHERE order_id = %s',
(confirm_num, row_id)
now() postgres 函数使用 psycopg2 python 包处理插入语句。
--Table Create Statement (SQL)
create table temp.current_timestamp_stream_test
(today_dts TIMESTAMP WITH TIME ZONE NOT NULL,
random_val varchar(200));
#Python3 to execute
import psycopg2
conn = psycopg2.connect(database = _xxx,
host = _xxx,
port = _xxx,
user = _xxx,
password = _xxx)
cur = conn.cursor()
cur.execute("""
insert into temp.current_timestamp_stream_test
(today_dts, random_val)
select now(), 'today';
""")
conn.commit()
我有一个用于存储两个时间戳的 postgresql table。第一个时间戳在订单发起时插入,第二个时间戳在订单状态返回时更新。
CREATE TABLE IF NOT EXISTS orders
(
order_id SERIAL PRIMARY KEY,
purchase_id INTEGER NOT NULL,
requested_amount INTEGER NOT NULL,
order_submitted_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
order_confirmed_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
confirm_num INTEGER NULL
);
我的理解是 TIMESTAMP
是类型,而 CURRENT_TIMESTAMP
是被调用以创建时间戳的函数。
我的困惑在于:当我插入和更新一行时,我需要做任何事情来调用 CURRENT_TIMESTAMP
函数还是自动调用
'INSERT INTO orders (purchase_id, requested_amount) \
VALUES (%s, %s) RETURNING order_id;',
(purchId, requestedAmount)
'UPDATE orders SET (confirm_num) VALUES (%s) WHERE order_id = %s',
(confirm_num, row_id)
当您插入一行并且不使用 default
选项指定字段值时,Postgres 将自动插入 current_timestamp
。
更新行时,如果要更改值,则必须明确指定值。所以你的 table 应该是这样的:
CREATE TABLE IF NOT EXISTS orders
(
order_id SERIAL PRIMARY KEY,
purchase_id INTEGER NOT NULL,
requested_amount INTEGER NOT NULL,
order_submitted_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
order_confirmed_date TIMESTAMP,
confirm_num INTEGER NULL
);
并更新查询:
'UPDATE orders \
SET (order_confirmed_date, confirm_num) = (current_timestamp, %s) \
WHERE order_id = %s',
(confirm_num, row_id)
now() postgres 函数使用 psycopg2 python 包处理插入语句。
--Table Create Statement (SQL)
create table temp.current_timestamp_stream_test
(today_dts TIMESTAMP WITH TIME ZONE NOT NULL,
random_val varchar(200));
#Python3 to execute
import psycopg2
conn = psycopg2.connect(database = _xxx,
host = _xxx,
port = _xxx,
user = _xxx,
password = _xxx)
cur = conn.cursor()
cur.execute("""
insert into temp.current_timestamp_stream_test
(today_dts, random_val)
select now(), 'today';
""")
conn.commit()