【问题标题】:Waterline - Postgres - DataTypes水线 - Postgres - 数据类型
【发布时间】:2018-04-25 18:25:28
【问题描述】:

我在使用 Waterline 模型和创建与这些模型相关的 Postgres 表时遇到困难。

无论我如何通过模型在表中创建 varchar(n),它都会将属性转换为文本。而且 bigint 也正在被转换为整数!

我应该更改 ORM 吗?

有没有办法做到这一点?

【问题讨论】:

  • 附带说明:varchartext 在 Postgres 中是相同的,所以这应该不是问题。
  • 理论上,Waterline 应该可以在不需要任何底层数据库知识的情况下工作。如果你想将你的数据库管理到那个级别,你可能想找到一种不使用水线的方法(尽管我知道这在预打包时并不自然)。为什么列类型的细节如此重要?支持水线的限制还不够吗?

标签: node.js database postgresql types sails.js


【解决方案1】:

您可以做一个更愉快的方法,使用 Waterline 在“CRUD”中的“RUD”而不是“C” - 创建!这是因为 Waterline 在创建中间表、主键(复合键)等方面可能非常“糟糕”。所以我今天要做的是:

  1. 编写完整的.sql 文件存档以创建索引和表。
  2. 创建一次数据库。 (根据需要进行更改)。
  3. 将所有表声明为模型。只需插入类型、主键(如果是单个键)和lifecycle callbacks
  4. 确保将config/models.js 设置为migrate : safe

结论:我可以使用 Waterline 插入、读取和删除行,但我不相信它(性能方面)来创建我的表。另一方面,Sequelize 是一个更成熟的 ORM,如果您需要,可以使用它。对我来说,混合 waterline + SQL 就足够了。

编辑:我的模型没有任何聚合(如 my_pets: { model: pet} ),只有行名称和类型,尽可能简单。

【讨论】:

    【解决方案2】:

    Sails 支持的数据类型:

    字符串、文本、整数、浮点数、日期、日期时间、布尔值、二进制、数组、json、mediumtext、longtext、objectid

    如果你需要指定确切的长度 -> varchar(n),你需要使用如上所示支持的数据类型,或者sails提供的选项叫做查询。

    Model.query() 方法,可用于执行任何类型的查询。

    var queryString='CREATE TABLE if not exists sailsusers.test (id INT NOT NULL,name VARCHAR(45) NULL,PRIMARY KEY (id))'
     Test.query(queryString,function(err,a){
        if(err)
          return console.log(err);
        console.log(a,'\n',b);
        res.ok();
     });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 2012-11-20
      • 2016-07-19
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多