【问题标题】:Sequelize model case insensitiveSequelize 模型不区分大小写
【发布时间】:2017-06-26 13:36:05
【问题描述】:

我正在使用 sequelize 在 Redshift 中进行查询。

但是 Redshift 对表列名不区分大小写,因此所有表名都是小写的。 并且续集模型不区分大小写。所以当我查询 findById 时,它会执行这个查询:

SELECT "id", "userId", "summonerId", "name", "profileIconId", "summonerLevel", "revisionDate", "createdAt", "updatedAt" FROM "Lol" AS "Lol" WHERE "Lol"."id" = '463d118c-2139-4679-8cdb-d07249bd7777222';

如果我在 Redshift 中执行查询,它就可以工作,但是 sequelize 只带回 id 和 name 列名,因为只有模型中的名称是小写的。

那么我怎样才能使 sequelize 不区分大小写呢?我尝试了field 选项,但不起作用。

所以我的模型是:

lol = sequelize.define('Lol', {
                id: {
                    type: Sequelize.STRING,
                    allowNull: false,
                    unique: true,
                    primaryKey: true,
                    field: 'id'
                },
                userId: {
                    type: Sequelize.STRING,
                    allowNull: false,
                    field: 'userid'
                },
                summonerId: {
                    type: Sequelize.INTEGER,
                    allowNull: false,
                    field: 'summonerid'
                },
                name: {
                    type: Sequelize.STRING,
                    allowNull: false,
                    field: 'name'
                },
                profileIconId: {
                    type: Sequelize.INTEGER,
                    allowNull: false,
                    field: 'profileiconid'
                },
                summonerLevel: {
                    type: Sequelize.INTEGER,
                    allowNull: false,
                    field: 'summonerlevel'
                },
                revisionDate: {
                    type: Sequelize.BIGINT,
                    allowNull: false,
                    field: 'revisiondate'
                },
                createdAt: {
                    type: Sequelize.DATE,
                    allowNull: false,
                    field: 'createdat'
                },
                updatedAt: {
                    type: Sequelize.DATE,
                    allowNull: false,
                    field: 'updatedat'
                }
            }, {
                freezeTableName: true,
                tableName: 'Lol'
            })

【问题讨论】:

    标签: postgresql sequelize.js amazon-redshift


    【解决方案1】:

    找到方法了。

    现在这是我让 Redshift 与 Sequelize 一起使用的完整设置:

    var Sequelize = require('sequelize');
    Sequelize.HSTORE.types.postgres.oids.push('dummy'); // avoid auto-detection and typarray/pg_type error
    AWS.config.update({accessKeyId: 'accessKeyId', secretAccessKey: 'secretAccessKey', region: "xxxxxx"});
    var sequelize = new Sequelize('database', 'username', 'password', {
        host: 'hostname',
        dialect: 'postgres',
        port: '5439',
        pool: {
            max: 10,
            min: 0,
            idle: 20000
        },
        returning: false, // cause sql error
        quoteIdentifiers: false, // set case-insensitive
        keepDefaultTimezone: true, // avoid SET TIMEZONE
        databaseVersion: '8.0.2' // avoid SHOW SERVER_VERSION
    
    });
    

    【讨论】:

    • 设置为 false 以使 Postgres 上的表名和属性不区分大小写并跳过它们的双引号。警告:将此设置为 false 可能会暴露漏洞,不推荐!
    • 我可以为特定型号做 {quoteIdentifiers: false}。
    猜你喜欢
    • 2017-06-03
    • 2014-08-08
    • 2020-03-03
    • 2020-08-29
    • 2011-03-08
    • 2021-10-14
    • 1970-01-01
    • 2011-01-14
    • 2013-11-02
    相关资源
    最近更新 更多