Python sqlalchemy时间戳及密码管理实现代码详解

作者:viewts 时间:2021-05-06 10:43:35 

一、时间戳

实际开发中,我们一般希望create_time和update_time这两个属性能自动设置,所以在建表的时候需要在model上特殊处理一下:


from sqlalchemy.sql import func

class User(db.Model):
 __tablename__ = 'user'
 id = db.Column(db.Integer, primary_key = True)
 email = db.Column(db.String(128))
 password_hash = db.Column(db.String(128))
 create_time = db.Column(db.DateTime, server_default = func.now())
 update_time = db.Column(db.DateTime, server_default = func.now(), onupdate = func.now())

关于datetime转时间戳的方法,例如‘2020-07-09 14:15:31'(从数据库读取一般为字符串),首先需要将它转换成timetuple:

import time
timetuple = time.strptime('2020-07-09 14:15:31', '%Y-%m-%d %H:%M:%S')

如果你拿到的是datetime对象,那么更简单:

now = datetime.datetime.now()
timetuple = now.timetuple()

然后将timetuple转化为时间戳:

timestamp = int(time.mktime(timetuple))

那么,时间戳又要如何转回datetime呢?方法如下:

last_time = datetime.datetime.fromtimestamp(timestamp)

二、密码管理

在数据库中一般不要明文存储密码,可以用散列值替换,修改model:


from sqlalchemy.sql import func
from werkzeug.security import generate_password_hash, check_password_hash

class User(db.Model):
 __tablename__ = 'user'
 id = db.Column(db.Integer, primary_key = True)
 email = db.Column(db.String(128))
 password_hash = db.Column(db.String(128))
 create_time = db.Column(db.DateTime, server_default = func.now())
 update_time = db.Column(db.DateTime, server_default = func.now(), onupdate = func.now())

@property
 def password(self):
   raise AttributeError('password is not a readable attribute')

@password.setter
 def password(self, password):
   self.password_hash = generate_password_hash(password)

def verify_password(self, password):
   return check_password_hash(self.password_hash, password)

将password设置成只写,使用verify_password来校验密码。

来源:https://www.cnblogs.com/viewts/p/13273470.html

标签:Python,sqlalchemy,时间,戳,密码
0
投稿

猜你喜欢

  • Python中assert函数的使用(含源代码)

    2022-07-18 19:46:49
  • 浅谈Pandas dataframe数据处理方法的速度比较

    2023-04-17 06:38:39
  • python用opencv批量截取图像指定区域的方法

    2021-10-14 09:07:33
  • Python 将 QQ 好友头像生成祝福语的实现代码

    2022-01-11 20:29:33
  • element使用自定义icon图标的两种解决方式

    2023-07-02 16:55:05
  • SQL语句优化提高数据库性能

    2024-01-29 03:40:08
  • python3启动web服务引发的一系列问题汇总

    2022-10-31 09:11:58
  • 关于Theano和Tensorflow多GPU使用问题

    2023-10-10 13:58:59
  • Python操作MySQL MongoDB Oracle三大数据库深入对比

    2024-01-13 21:48:00
  • 图文教程mssqlserver数据库导出到另外一个数据库的方法

    2024-01-24 20:33:54
  • Python遍历zip文件输出名称时出现乱码问题的解决方法

    2022-04-04 15:40:20
  • js实时获得服务器上时间

    2008-11-25 13:55:00
  • Python对象与引用的介绍

    2023-04-30 12:51:59
  • Python抓取移动App数据使用mitmweb监听请求与响应

    2022-03-24 21:09:29
  • Python实现基于C/S架构的聊天室功能详解

    2022-06-14 11:43:38
  • 8个js表单验证函数

    2007-10-28 19:19:00
  • MYSQL每隔10分钟进行分组统计的实现方法

    2024-01-22 13:56:42
  • MySQL创建新用户、增加账户的2种方法及使用实例

    2024-01-14 12:54:55
  • 编程经验点滴 动态SQL的拼接技巧

    2024-01-23 22:04:35
  • go语言代码生成器code generator使用示例介绍

    2024-05-21 10:19:29
  • asp之家 网络编程 m.aspxhome.com