更新时自动更新时间戳
Auto update timestamp on update
我创建了一个 table,其代码如下:
CREATE TABLE products (
id SERIAL,
store_id INTEGER NOT NULL,
url TEXT UNIQUE,
visible BOOLEAN,
added_date timestamp without time zone NOT NULL DEFAULT NOW(),
PRIMARY KEY(id, store_id)
);
和 Peewee 一起,我确实发现在更新时,每当我通过
对行进行更新时,时间戳不会自动更新
class Products(Model):
id = IntegerField(column_name='id')
store_id = TextField(column_name='store_id')
url = TextField(column_name='url')
visible = BooleanField(column_name='visible')
added_date = TimestampField(column_name='added_date')
class Meta:
database = postgres_pool
db_table = "products"
@classmethod
def on_exists(cls, pageData):
try:
if exists := cls.select().where((cls.store_id == Stores.store_id) & (cls.url == pageData.url)).exists():
# On update execution it should refresh the added_time to current time
cls.update(visible=False).where((cls.store_id == Stores.store_id) & (cls.url == pageData.url)).execute()
return exists
except Products.DoesNotExist:
return None
但是我的问题是每次我使用这个命令并成功更新。 added_time 时间戳似乎没有更新它的时间戳。我的问题是,它如何在更新时自动更新时间戳?
这是触发器的作业:
CREATE FUNCTION upd_ts() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
NEW.added_date = current_timestamp;
RETURN NEW;
END;$$;
CREATE TRIGGER upd_ts BEFORE UPDATE ON products
FOR EACH ROW EXECUTE PROCEDURE upd_ts();
触发器将在修改行并更改即将插入的行之前触发。
有关所有详细信息,请参阅 the documentation。
我创建了一个 table,其代码如下:
CREATE TABLE products (
id SERIAL,
store_id INTEGER NOT NULL,
url TEXT UNIQUE,
visible BOOLEAN,
added_date timestamp without time zone NOT NULL DEFAULT NOW(),
PRIMARY KEY(id, store_id)
);
和 Peewee 一起,我确实发现在更新时,每当我通过
对行进行更新时,时间戳不会自动更新class Products(Model):
id = IntegerField(column_name='id')
store_id = TextField(column_name='store_id')
url = TextField(column_name='url')
visible = BooleanField(column_name='visible')
added_date = TimestampField(column_name='added_date')
class Meta:
database = postgres_pool
db_table = "products"
@classmethod
def on_exists(cls, pageData):
try:
if exists := cls.select().where((cls.store_id == Stores.store_id) & (cls.url == pageData.url)).exists():
# On update execution it should refresh the added_time to current time
cls.update(visible=False).where((cls.store_id == Stores.store_id) & (cls.url == pageData.url)).execute()
return exists
except Products.DoesNotExist:
return None
但是我的问题是每次我使用这个命令并成功更新。 added_time 时间戳似乎没有更新它的时间戳。我的问题是,它如何在更新时自动更新时间戳?
这是触发器的作业:
CREATE FUNCTION upd_ts() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
NEW.added_date = current_timestamp;
RETURN NEW;
END;$$;
CREATE TRIGGER upd_ts BEFORE UPDATE ON products
FOR EACH ROW EXECUTE PROCEDURE upd_ts();
触发器将在修改行并更改即将插入的行之前触发。
有关所有详细信息,请参阅 the documentation。