Skip to content

对象与数据模型


简介


对象

在 ORM 框架中,对象指的是编程语言对象,比如 Python 中的类或 Java 中的类。这些对象代表了应用程序中的实体,例如用户、产品、订单等。这些对象通常包含属性(字段)和方法,用于描述实体的属性和行为。对象可以用来表示应用程序中的业务逻辑和数据。


数据模型

数据模型是与数据库表相关的结构。在关系型数据库中,数据模型通常是表、列、外键等元素的集合,用于定义数据的结构和关系。


使用对象与数据模型的优势

使用对象与数据模型的概念是为了更好地处理数据在应用程序和数据库之间的映射和交互。

  1. 抽象性和易用性:对象与数据模型提供了一种抽象层,允许开发人员使用编程语言中的对象来表示应用程序中的实体,而不必直接与数据库表和 SQL 语句交互。这使得数据库访问更加直观和易用。

  2. 面向对象编程:使用对象与数据模型的方法与面向对象编程的思维方式相吻合。开发人员可以使用类、属性和方法来表示实体的属性和行为,这与面向对象编程语言的特性相一致。


定义表结构

表结构定义方式

  • 类名相当于表名,驼峰命名的类名,转为下划线连接。例如 class UserInfo 建立的表名为 user_info
  • 可以通过 __tablename__ 自定义表名。
  • 类的属性相当于表的一个字段(一列)。
  • 字段属性使用 Column() 定义:
    • 定义属性的格式:name = Column(参数的类型, 其他的属性)
    • 第一个参数:定义字段数据类型和长度。
    • 后面的参数:定义列选项(比如设置主键、不许为空、唯一等等)。

以下代码定义了 User 表,表中包含了 id,username,password 三个字段。

在定义字段时,需要指定字段的数据类型和需要的属性。

class User(Base):
    __tablename__ = "user"
    id = Column(Integer, primary_key=True)
    username = Column(String(80))
    password = Column(String(120))

常用的数据类型

类型名 python 中类型 说明
Integer int 普通整型,一般是 32 位
SmallInteger int 取值范围小的整数,一般是 16 位
BigInteger int 或 long 不限制精度的整数
Float float 浮点数
Numeric decimal.Decimal 普通整数,一般是 32 位
String str 变长字符串
Text str 变长字符串,对较长或不限长度的字符串做了优化
JSON str JSON 格式字符串
Unicode unicode 变长 Unicode 字符串
UnicodeText unicode 变长 Unicode 字符串,对较长或不限长度的字符串做了优化
Boolean bool 布尔值
Date datetime.date 时间
Time datetime.datetime 日期和时间
LargeBinary str 二进制文件

定义属性的中常用的参数类型有以下几个:

  • 整型:Integer
  • 字符串,括号中是字符串的最大长度:String(20)
  • json 字符串:JSON
  • 时间格式:DateTime

常用的列选项

选项名 说明
primary_key 是否为主键。为 True,则表示该列是主键
unique 是否唯一。为 True,则代表这列不允许出现重复的值
nullable 是否允许为空。如果为 True,允许有空值,如果为 False,不允许有空值
default 默认值。
index 如果为 True,为这列创建索引,提高查询效率
comment 注释字段

完整示例

接下来,看一个比较完整的定义表模型的代码示例。

这样就完成了对一个数据库表的模型的建立。

from sqlalchemy import *
# 导入 Query 以便于调用的时候代码提示
from sqlalchemy.orm import Query

# 定义数据库的表 需要继承 Base
class User(Base):
  # 设置数据库表名
    __tablename__ = "user"
    # 每一个类变量表示一个数据库表的列名
    # 第一个参数是表示数据的类型, primary_key=True 表示是主键
    id = Column(Integer, primary_key=True, comment="用户ID")
    # unique = True 表示是不能重复的  nullable=False 表示不可以为空
    username = Column(String(80), unique=True, nullable=False, comment="用户名")
    email = Column(String(120), unique=True, nullable=False, comment="邮箱")
    gender = Column(String(3), comment="性别")

    def __repr__(self):
        # 数据库的 魔法方法 直观展示数据
        '''[<User "张三">,<User "李四">]'''
        return f'<User {self.username}>'

总结

在本章节中,介绍了 SQLAlchemy 中对象与数据模型的相关概念和表结构的定义。

  1. 对象与数据模型简介
  2. 使用对象与数据模型的优势
  3. 表结构定义方式
  4. 常用的数据类型
  5. 常用的列选项
  6. 完整示例