摘要:代碼示例用戶基本信息用戶名在視圖函數(shù)更新數(shù)據(jù)更新只有調(diào)用字段的值才會(huì)在改變項(xiàng)目使用的,使用了語法數(shù)據(jù)庫遷移管理,文檔,文檔
peewee update_time字段爬坑
SQLalchemy中BaseModel定義:
# -*- coding:utf-8 -*- from datetime import datetime from sqlalchemy import Column, DateTime class BaseModel(object): """模型基類,為每個(gè)模型補(bǔ)充創(chuàng)建時(shí)間與更新時(shí)間""" create_time = Column(DateTime, default=datetime.now) # 記錄的創(chuàng)建時(shí)間 update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now) # 記錄的更新時(shí)間
peewee中的BaseModel定義:
# -*- coding: utf-8 -*- from datetime import datetime from peewee import Model, CharField import peewee_async # peewee_async異步操作MySQL from configs import config # 數(shù)據(jù)庫連接池 db = peewee_async.PooledMySQLDatabase( config.get("mysql_db"), host=config.get("mysql_host"), port=config.get("mysql_port"), user=config.get("user"), password=config.get("pwd"), min_connections=10, max_connections=50 ) class BaseModel(Model): """模型基類,為每個(gè)模型補(bǔ)充創(chuàng)建時(shí)間與更新時(shí)間""" create_time = DateTimeField(default=datetime.now, verbose_name="創(chuàng)建時(shí)間") # 記錄的創(chuàng)建時(shí)間 update_time = DateTimeField(default=datetime.now, verbose_name="更新時(shí)間") # 記錄的更新時(shí)間 def save(self, *args, **kwargs): """覆寫save方法, update_time字段自動(dòng)更新, 實(shí)例對(duì)象需要在update成功之后調(diào)用save()""" if self._get_pk_value() is None: # this is a create operation, set the date_created field self.create_time = datetime.now().strftime( "%Y-%m-%d %H:%M:%S") self.update_time = datetime.now().strftime( "%Y-%m-%d %H:%M:%S") return super(BaseModel, self).save(*args, **kwargs)
很明顯sqlalchemy定義的update_time字段的onupdate=datetime.now會(huì)在模型類的實(shí)例對(duì)象更新的時(shí)候自動(dòng)更新該字段的值;而peewee的update_time字段并沒有onupdate這個(gè)選項(xiàng),從而無法實(shí)現(xiàn)自動(dòng)的更新時(shí)間,故而在BaseModel中覆寫了save方法,其他模型類繼承BaseModel,那么子類的實(shí)例對(duì)象在update成功之后調(diào)用對(duì)象的save方法可以達(dá)到更新update_time字段值的目的。
代碼示例:
class User(BaseModel): """用戶""" # 1 基本信息 user_name= CharField(max_length=16, unique=True, null=False, verbose_name="用戶名") class Meta: database = db db_table = "user"
在視圖函數(shù)更新數(shù)據(jù):
# 更新 try: async with db.atomic_async(): user.user_name= new_user_name await self.application.manager.update(user, only=["user_name"]) except Exception as err: self.application.logger.error(err) db.rollback() else: # update_time user.save() # 只有調(diào)用save() update_time字段的值才會(huì)在MySQL改變
NOTE:項(xiàng)目使用的tornado5.1,使用了async+await語法;數(shù)據(jù)庫遷移管理peewee-migrate,peewee文檔:http://docs.peewee-orm.com/en..., peewee-async文檔:https://peewee-async.readthed...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/19385.html
摘要:顧名思義,就是將關(guān)系型數(shù)據(jù)庫與中的對(duì)象關(guān)聯(lián)起來,提供了一種操作數(shù)據(jù)的簡便方式,相當(dāng)于對(duì)數(shù)據(jù)庫加了一層更友好的接口。新增數(shù)據(jù)對(duì)象方法方法直接創(chuàng)建數(shù)據(jù)對(duì)象,需要調(diào)用方法保存到數(shù)據(jù)庫中。 咱們編程教室有不少同學(xué),學(xué)完了基礎(chǔ)課程,掌握了一定的編程能力,開始做項(xiàng)目了。然后很可能遇到一個(gè)問題:管理數(shù)據(jù)。課程里有講過用文件保存數(shù)據(jù),還有 pickle 、 csv 等模塊輔助。但對(duì)于稍微復(fù)雜一點(diǎn)的數(shù)據(jù)...
摘要:每個(gè)對(duì)象包括一個(gè)標(biāo)題,一個(gè)和頂層的元數(shù)據(jù)鍵,下面是提取作品標(biāo)題的代碼對(duì)應(yīng)下面創(chuàng)建的查詢?cè)诮酉聛淼睦又校瑢⑻崛“囟?biāo)簽的條目。對(duì)于擴(kuò)展,該可選字典提供了附加元數(shù)據(jù)進(jìn)行標(biāo)記字段,以及通過前綴的長度存儲(chǔ)快速前綴查詢。 早在九月份,編程界出現(xiàn)一個(gè)名為 json1.c 的文件,此前這個(gè)文件一直在 SQLite 的庫里面。還有,筆者也曾總結(jié)通過使用新的 json1 擴(kuò)展來編譯 pysqli...
閱讀 3143·2021-11-23 10:02
閱讀 3118·2021-11-16 11:53
閱讀 3093·2021-09-23 11:21
閱讀 3369·2019-08-30 13:02
閱讀 1622·2019-08-29 16:18
閱讀 1557·2019-08-29 12:55
閱讀 1457·2019-08-26 12:24
閱讀 2085·2019-08-26 10:36