1. 下载diesel:cargo install cargo-edit安装包管理工具,cargo add **diesel**添加依赖,featruespostgres(如果使用chrono的时间类型还要添加chrono)

  2. 下载命令行工具:cargo install diesel_cli --no-default-features --features postgres(禁用默认特性,仅启用 PostgreSQL 支持)

    1. MacOS上使用brew install libpq下载数据库客户端,并按brew的提示添加环境变量
  3. 创建或修改.env文件,将连接字符串DATABASE_URL写入

  4. 使用diesel setup初始化,这将完成:

    1. 读取 .env 文件中的 DATABASE_URL
    2. 连接到数据库,若数据库不存在则创建它
    3. 创建 migrations 目录并应用任何现有迁移
  5. 使用diesel migration generate migration-first生成一个新的迁移,这将在migrations 目录中创建一个新的子目录,包含 up.sqldown.sql 文件

  6. 自行修改sql文件(每次迁移都要手动编辑sql文件)

  7. 运行diesel migration run进行迁移

  8. 使用diesel print-schema > src/db/schema.rs将数据库的真实结构映射成schema

    1. 或者创建diesel.toml并指定:[print_schema] file = "src/db/schema.rs",再运行diesel print-schema
    2. 注意,schema.rs是自动生成的,不应手动修改,在每次迁移之后,会自动更新 schema.rs
    3. models.rs通过Diesel 的宏(如 #[derive(Queryable, Insertable)])将结构体与 schema.rs 中的表对应起来
  9. 如果有枚举类型,可以使用diesel-derive-enum包中的DbEnum派生宏

  10. 在 Diesel 里, 是两个不同的东西,在使用 use schema::xxx::dsl::*; 时,会得到一个和表同名的标识符,这才是真正可以调用 .filter(...).select(...) 等方法的「表查询构造器」, 是表中的字段,如 id,它们只能在 .filter(...), .select(...) 等方法里作为条件或选择字段使用,而不是调用者