📜  sequelize postgresql 模式 - SQL (1)

📅  最后修改于: 2023-12-03 14:47:24.380000             🧑  作者: Mango

Sequelize Postgresql 模式 - SQL

Sequelize 是一个支持多种数据库的 ORM 框架,它提供了许多有用的功能,比如模型定义、表关联、事务处理以及查询构建接口等。其中,Postgresql 是 Sequelize 支持的数据库之一,本文将重点介绍 Sequelize 在 Postgresql 数据库中的模式操作。

什么是模式

在数据库中,模式用来描述一个命名空间。一个模式可以包含许多表、视图、函数、序列以及其他对象。在 Postgresql 中,每个数据库都有一个默认模式叫做 public,该模式下的所有对象都是公共的,任何用户都可以访问它。Sequelize 我们可以用它来创建自己的模式,并在其中创建表格。

创建模式

创建模式非常简单,只需要使用 Sequelize 提供的 sequelize.createSchema 方法即可。

const sequelize = new Sequelize('database', 'username', 'password', {
  dialect: 'postgres',
  host: 'localhost'
});

sequelize.createSchema('myschema').then(() => {
  console.log('schema created');
});
删除模式

删除模式也很简单,只需要使用 Sequelize 提供的 sequelize.dropSchema 方法即可。

sequelize.dropSchema('myschema').then(() => {
  console.log('schema droped');
});
模式中的表操作

在模式中,我们可以创建、修改、删除表格。下面将一一介绍这些操作。

创建表格

创建表格,需要先定义表格的结构,比如表格的列、主键、外键等。Sequelize 的模型定义可以用来定义表格的结构,它支持多种数据类型,比如字符串、整数、日期、布尔值等。下面是一个简单的例子:

const User = sequelize.define('User', {
  firstName: {
    type: Sequelize.STRING,
    allowNull: false
  },
  lastName: {
    type: Sequelize.STRING
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true
  }
});

上述例子中,我们定义了一个 User 模型,它有三个属性:firstName、lastName 和 email,分别对应数据库中的三个列。其中,firstName 是必须的,因为我们设置了 allowNull: false,email 是唯一的,因为我们设置了 unique: true。当我们定义好模型之后,我们就可以通过 sync 方法来同步定义到数据库中。

sequelize.sync({ force: true }).then(() => {
  console.log('table created');
});

上述例子中,我们设置了 force: true,代表我们要先删除已存在的表格,然后重新创建新表格。在生产环境中,我们不应该使用 force:true,而是应该采用迁移来更新数据库表结构。

修改表格

对于已经存在的表格,我们可以通过模型定义来修改表格结构,有些修改需要手动执行 SQL 命令。

添加新列

如果我们需要添加一个新列,我们可以通过模型定义来完成:

User.addColumn('age', {
  type: Sequelize.INTEGER
});

上述例子中,我们添加了一个名为 age 的新列,类型为整数。

修改列定义

如果我们需要修改一个已有的列的定义,比如修改类型、默认值等,我们需要手动执行 SQL 命令。

sequelize.query(`
  ALTER TABLE "Users" ALTER COLUMN "age" SET DEFAULT 0
`);

上述例子中,我们修改了 Users 表格中的 age 列的默认值为 0。

删除表格

如果我们需要删除一个已有的表格,我们可以使用模型定义的 drop 方法:

User.drop();
模式中的事务处理

在数据库中进行的一组操作,要么全部成功,要么全部失败,这种情况下就需要用到事务处理。Sequelize 提供了 sequelize.transaction 方法来创建事务,下面是一个例子:

sequelize.transaction((transaction) => {
  return User.create({ firstName: 'John', lastName: 'Doe', email: 'johndoe@example.com' }, { transaction })
    .then(() => {
      return User.create({ firstName: 'Jane', lastName: 'Doe', email: 'janedoe@example.com' }, { transaction });
    });
}).then(() => {
  console.log('transaction committed');
}).catch((err) => {
  console.error('transaction rolled back:', err);
});

上述例子中,我们创建了一个事务,后续两个 User 的创建操作都处于该事务中。如果其中一个操作失败,则整个事务都会回滚。

查询构建

Sequelize 提供了多种查询构建工具,支持复杂的查询条件,比如嵌套查询、子查询、聚合查询等。下面是一个简单的例子:

User.findAll({
  where: {
    firstName: 'John'
  }
}).then((users) => {
  console.log(users);
});

上述例子中,我们查询了所有 firstName 为 John 的用户。Sequelize 提供了 findAllfindOnefindAndCountAll 等多种查询方法。除了查询方法外,Sequelize 还提供了诸如 limitoffsetorderinclude 等查询工具。

总结

本文介绍了 Sequelize 在 Postgresql 数据库中的模式操作,包括模式的创建、删除,表格的创建、修改、删除,事务处理以及查询构建工具的使用。Sequelize 是一个功能强大的 ORM 框架,对于 Node.js 的开发者来说,是一个不可或缺的工具。