【SQLAlchemy】官方文档教程学习2:模型类的定义与创建数据表

Declare a Mapping

当使用ORM时,配置过程首先是描述我们要处理的数据库表,然后是定义我们自己的类,这些类将被映射到这些表。在现代SQLAlchemy中,这两个任务通常是一起执行的,使用一个称为声明式扩展Declarative Extensions的系统,它允许我们创建包含指令的类,以描述它们将被映射到的实际数据库表。

使用声明式系统映射的类是用一个基类来定义的,这个基类维护着一个相对于这个基类的类和表的目录–这被称为声明式基类declarative base class。我们的应用程序通常在一个常用的导入模块中只有一个这个基类的实例。我们使用declarative_base()函数来创建基类,如下所示。

from sqlalchemy.orm import declarative_base

Base = declarative_base()

现在我们有了一个 “base”,我们可以在它的基础上定义任何数量的映射类。我们将从一个名为user的表开始,它将存储使用我们的应用程序的终端用户的记录。一个名为User的新类将是我们映射到这个表的类。在这个类中,我们定义了关于我们将映射到的表的细节,主要是表名,以及列的名称和数据类型。

from sqlalchemy import Column, Integer, String
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    nickname = Column(String)
    
    def __repr__(self):
        return "<User(name='%s', fullname='%s', nickname='%s')>" % (
            self.name, self.fullname, self.nickname)

一个使用声明式的类至少需要一个__tablename__属性,以及至少一个作为主键一部分的Column。SQLAlchemy从来不会自己对一个类所引用的表做任何假设,包括它没有内置的名称、数据类型或约束的约定。但这并不意味着需要模板,相反,我们鼓励你使用助记函数和mixin类创建自己的自动约定,这在Mixin和自定义基类中有详细介绍。

当我们的类被构造出来时,Declarative会用称为描述符的特殊Python访问器替换所有的Column对象;这是一个被称为 "工具化 "的过程。被 "工具化 "的映射类将为我们提供在 SQL 上下文中引用我们的表,以及从数据库中持久化和加载列的值的方法。

除了映射过程对我们的类所做的事情之外,这个类在其他方面主要还是一个普通的Python类,我们可以对它定义任何数量的普通属性和我们的应用程序所需要的方法。

Create a Schema

通过Declarative系统构造的User类,我们已经定义了关于我们的表的信息,称为表元数据table metadata。SQLAlchemy用来表示特定表的这些信息的对象叫做Table对象,这里Declarative为我们做了一个对象。我们可以通过检查__table__属性来查看这个对象。

>>> User.__table__ 
Table('users', MetaData(),
            Column('id', Integer(), table=<users>, primary_key=True, nullable=False),
            Column('name', String(), table=<users>),
            Column('fullname', String(), table=<users>),
            Column('nickname', String(), table=<users>), schema=None)

当我们声明我们的类时,Declarative使用了一个Python元类,以便在类声明完成后执行额外的活动;在这个阶段内,它就根据我们的规范创建了一个Table对象,并通过构造一个Mapper对象将其与类关联起来。这个对象是一个我们通常不需要直接处理的幕后对象(虽然它可以在我们需要的时候提供大量关于我们映射的信息)。

Table对象是一个更大的集合MetaData的成员。当使用声明式时,这个对象可以通过我们声明式基类的.metadata属性获得。

MetaData是一个注册表(registry),它包括向数据库发出一组有限的模式生成命令的能力。由于我们的SQLite数据库实际上并没有users表存在,所以我们可以使用MetaData向数据库发出CREATE TABLE语句,用于所有还不存在的表。下面,我们调用MetaData.create_all()方法,传入我们的Engine作为数据库连接的来源。我们会看到,首先会发出特殊的命令来检查users表是否存在,之后会发出实际的CREATE TABLE语句。

>>> Base.metadata.create_all(engine)
BEGIN...
CREATE TABLE users (
    id INTEGER NOT NULL,
    name VARCHAR,
    fullname VARCHAR,
    nickname VARCHAR,
    PRIMARY KEY (id)
)
[...] ()
COMMIT
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQLAlchemy 是一个 Python SQL 框架。它提供了一组用于与数据库交互的高级对象关系映射(ORM)工具。在 SQLAlchemy 中,模型是用来表示数据库中的表的 Python 模型中的字段映射到数据库表中的列。备注可以通过在模型定义 docstring 来实现。 ### 回答2: 在 SQLAlchemy 模型中,备注是用来描述数据库表的各个字段的属性、含义和限制条件的文本。备注对于理解和维护数据库结构非常重要,可以提供更清晰的数据模型定义文档化。 在 SQLAlchemy 中,我们可以使用 `Column` 对象的 `doc` 参数来添加字段的备注。例如: ``` from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String(50), nullable=False, doc='用户的用户名') password = Column(String(50), nullable=False, doc='用户的密码') ``` 上面的代码中,我们在 `Column` 对象的构造函数中使用了 `doc` 参数,通过这个参数可以添加字段的备注。在这个例子中,我们为 `username` 和 `password` 字段添加了对应的备注。 备注可以是任何字符串,用来描述字段的特点、功能、限制条件等。在开发过程中,可以使用备注来记录字段的约束、验证规则,或者提供字段的用法示例。 当我们使用 SQLAlchemy 创建数据库表时,可以在模型定义结束后,使用 `create_all()` 方法来生成表结构。在生成表结构时,SQLAlchemy 会自动获取字段的备注,并将其存储在数据库元数据中,从而实现数据库表字段的文档化。 总之,使用 SQLAlchemy模型备注可以提供更清晰、更方便的数据库模型定义文档化方式,方便开发人员理解、维护和使用数据库。 ### 回答3: SQLAlchemy 模型备注指的是对 SQLAlchemy 模型定义中的字段或表格进行注释或描述的功能。通常用于提供关于模型的额外信息,方便开发者阅读和理解模型的结构和用途。 在 SQLAlchemy 中,可以使用 `__doc__` 属性来为模型添加注释。例如,假设我们有一个名为 `User` 的模型,我们可以通过在模型定义中添加注释来描述该模型的作用: ```python class User(db.Model): """ 用户模型 """ __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50)) email = db.Column(db.String(120)) def __repr__(self): return '<User %r>' % self.username ``` 在上面的例子中,我们使用了 `"""` 符号来添加多行注释,对这个模型进行了简短的描述。开发者可以通过查看这个注释来快速了解这个模型的作用和属性。 使用模型备注的好处有: 1. 提供了模型的说明和描述,有助于团队成员更好地理解并使用模型; 2. 对于复杂的模型,可以明确每个字段和关系的作用,减少开发者的困惑; 3. 在文档生成工具使用时,模型备注可以作为文档的一部分,方便查阅和参考。 总之,SQLAlchemy 模型备注是一种用于注释和描述模型的功能,可以提供额外的信息,方便开发者使用和理解模型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值