返回介绍

数据库模型

发布于 2025-01-02 21:53:49 字数 1715 浏览 0 评论 0 收藏 0

定义数据库中一张表及其字段的类,通常叫做数据模型。ORM(SQLAlchemy) 会将类的实例关联到数据库表中的数据行,并翻译相关操作。

就让我们从用户模型开始吧,利用 WWW SQL Designer 工具,我画了一张图来设计用户表的各个字段(译者注:实际表名为 user):

id 字段通常存在于所有模型并用作 主键 。每个用户都会被数据库分配一个 id 值,并存储到这个字段中。大多数情况下,主键都是数据库自动赋值的,我只需要提供 id 字段作为主键即可。

usernameemailpassword_hash 字段被定义为字符串(数据库术语中的 VARCHAR ),并指定其最大长度,以便数据库可以优化空间使用率。 usernameemail 字段的用途不言而喻, password_hash 字段值得提一下。 我想确保我正在构建的应用采用安全最佳实践,因此我不会将用户密码明文存储在数据库中。 明文存储密码的问题是,如果数据库被攻破,攻击者就会获得密码,这对用户隐私来说可能是毁灭性的。 如果使用 哈希密码 ,这就大大提高了安全性。 这将是另一章的主题,所以现在不需分心。

用户表构思完毕之后,我将其用代码实现,并存储到新建的模块 app/models.py 中,代码如下:

from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))

    def __repr__(self):
        return '<User {}>'.format(self.username)

上面创建的 User 类继承自 db.Model,它是 Flask-SQLAlchemy 中所有模型的基类。 这个类将表的字段定义为类属性,字段被创建为 db.Column 类的实例,它传入字段类型以及其他可选参数,例如,可选参数中允许指示哪些字段是唯一的并且是可索引的,这对高效的数据检索十分重要。

该类的 __repr__ 方法用于在调试时打印用户实例。在下面的 Python 交互式会话中你可以看到 __repr__() 方法的运行情况:

>>> from app.models import User
>>> u = User(username='susan', email='susan@example.com')
>>> u
<User susan>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文