我正在尝试使用Sequelize CLI工具运行数据库迁移,但是遇到一个问题,该工具未处理我的ENV变量。在github存储库中,它说在版本2.0.0(我在2.4.0中)中,您可以config/config.js像这样直接访问ENV变量process.env.DB_HOSTNAME,但是我收到一条错误消息,指示未传递任何值来自变量
错误:
Unable to connect to database: SequelizeAccessDeniedError: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)
Run Code Online (Sandbox Code Playgroud)
config.js:
module.exports = {
"development": {
"username": process.env.LOCAL_USERNAME,
"password": process.env.LOCAL_PASSWORD,
"database": process.env.LOCAL_DATABASE,
"host": "127.0.0.1",
"dialect": "mysql",
"migrationStorageTableName": "sequelize_meta"
},
}
Run Code Online (Sandbox Code Playgroud)
.env:
LOCAL_DATABASE="db_name"
LOCAL_USERNAME="root"
LOCAL_PASSWORD="test"
Run Code Online (Sandbox Code Playgroud) 在 node/sequelize cli 中为两个单独的表和连接表插入数据的最佳方法或任何方法是什么
即我有一个地址表,我添加了这个
const faker = require('faker');
const models = require('./server/db/sequelize/models');
const States = models.States;
const Addresses = models.Addresses;
module.exports = {
up: (queryInterface) => {
return Promise.all([
for (let i = 0; i < 1000; i++) {
Addresses.create({
streetName: faker.address.streetAddress(),
streetNameAlt: faker.address.streetAddress(),
zipCode: faker.address.zipCode(),
town: faker.address.county(),
city: faker.address.city(),
stateId: id,
addressTypeId: 1,
createdAt: faker.date.recent(),
updatedAt: faker.date.recent(),
});
}
},
down: (queryInterface) => {
return queryInterface.bulkDelete('Addresses', null, {});
}
};
Run Code Online (Sandbox Code Playgroud)
然而,当我生成一个用户时,我想从我的地址表中选择一个随机地址作为 addressId 并创建一个联合记录
IE
const faker = require('faker'); …Run Code Online (Sandbox Code Playgroud) 我正在使用sequelize来访问一个postgres数据库,并且我想查询一个城市,例如包括“ Building”表,但是我想将输出重命名为“ buildings”并返回http响应,但是我遇到了这个错误:
{SequelizeEagerLoadingError:建筑使用别名与城市相关联。您已包括一个别名(建筑物),但与您的关联中定义的别名不匹配。
City.findById(req.params.id,{
include: [
{
model: Building, as: "buildings"
}
]
}).then(city =>{
console.log(city.id);
res.status(201).send(city);
}) .catch(error => {
console.log(error);
res.status(400).send(error)
});
Run Code Online (Sandbox Code Playgroud)
城市模型
const models = require('../models2');
module.exports = (sequelize, DataTypes) => {
const City = sequelize.define('city', {
name: { type: DataTypes.STRING, allowNull: false },
status: { type: DataTypes.INTEGER, allowNull: false },
latitude: { type: DataTypes.BIGINT, allowNull: false },
longitude: { type: DataTypes.BIGINT, allowNull: false },
}, { freezeTableName: true});
City.associate = function(models) {
// associations can …Run Code Online (Sandbox Code Playgroud) postgresql node.js sequelize.js sequelize-cli sequelize-typescript
我有一个新的 app.js 的最基本的框架,在节点中设置了sequelize 和express。每当我运行该项目时,我都会得到:
{ Error: SQLITE_CANTOPEN: unable to open database file errno: 14, code: 'SQLITE_CANTOPEN' }
我已经四处寻找解决方案,但根据我发现的其他帖子,我没有使用其他技术,例如电子,这些技术似乎会引起问题。我也尝试了将我的database.sqlite3从根目录移动到它自己的文件夹中的建议,但这没有帮助。
我的 app.js 看起来仍然像一个样板。我真的没有做太多事情,只是尝试在创建模型并使用sequelize-cli 迁移后测试连接。
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
//Database Connection
const db = require('./config/database');
const Sequelize = require("sequelize");
const sequelize = new Sequelize({
dialect: "sqlite",
storage: "path/to/database.sqlite"
});
//Test the DB Connection
sequelize.authenticate()
.then(() => console.log('Database Connected'))
.catch(err => console.log('Error: ', err))
//Server
const app = express()
app.get('/', (req, res) => res.send('HELLO WORLD'))
const …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 sequelize 从 mysql 数据库中获取所有记录,并且尝试了以下方法:
shops.findAndCountAll({
where: {
createdAt: {
[Op.gte]: moment().subtract(7, 'days').toDate()
}
}
})
Run Code Online (Sandbox Code Playgroud)
当我使用它时,出现错误:
ReferenceError: moment is not defined
所以我尝试了这种方法:
shops.findAndCountAll({
where: {
createdAt: {
[Op.gte]: Sequelize.literal('NOW() - INTERVAL "7d"'),
}
}
})
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlState: '42000',
sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near '' at line 1",
sql: "SELECT count(*) AS `count` FROM `shop` …Run Code Online (Sandbox Code Playgroud) 任何人都知道如何在sequelize seeder上自定义选择查询
我尝试了两种方法,但没有一项工作
第一次尝试
up: function(queryInterface, Sequelize) {
return queryInterface.sequelize.query(
'SELECT * FROM "Users" WHERE username = "admin"',
{ type: queryInterface.sequelize.QueryTypes.SELECT }
).then(function(users) {});
},
Run Code Online (Sandbox Code Playgroud)
然后出现错误
SequelizeDatabaseError: column "admin" does not exist
Run Code Online (Sandbox Code Playgroud)
我不明白为什么admin在这里?
第二次尝试
return queryInterface.sequelize.query('SELECT * FROM "Users" WHERE username = :admin', {
replacement: {
admin: 'admin'
},
type: queryInterface.sequelize.QueryTypes.SELECT
}).then(function(users) {
});
Run Code Online (Sandbox Code Playgroud)
发生以下错误
SequelizeDatabaseError: syntax error at or near ":"
第三次尝试
return queryInterface.sequelize.query(
'SELECT * FROM "Users" WHERE username = ' admin '',
{type: queryInterface.sequelize.QueryTypes.SELECT})
.then(function(users) { }) …Run Code Online (Sandbox Code Playgroud) 我正在通过Author hasMany Books示例进行工作,并尝试运行sequelize-cli迁移,但是在运行以下迁移时遇到以下问题:
ERROR: relation "authors" does not exist
Run Code Online (Sandbox Code Playgroud)
这是创建作者的第一个迁移:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Authors', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
dateOfBirth: {
type: Sequelize.DATEONLY
},
dateOfDeath: {
type: Sequelize.DATEONLY
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Authors');
}
};
Run Code Online (Sandbox Code Playgroud)
第二次迁移创建一本书: …
你能帮我解决这个问题吗?我将 sqlite3 与 sequelize npm 包一起使用。运行迁移后,我在控制台中没有看到错误,但也没有看到任何数据库文件。我也可以一次又一次地运行迁移,它看起来不像是正确的行为。这是我的/config/config.js文件:
const path = require('path');
module.exports = {
test: {
username: 'root',
password: 'root',
database: path.join(__dirname, '..', 'database_test.sqlite'),
host: 'localhost',
dialect: 'sqlite',
logging: console.log,
operatorsAliases: false
}
};
Run Code Online (Sandbox Code Playgroud)
这是迁移/XXXXXXXXXXXXXX-create-appeal.js文件:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => queryInterface.createTable('appeals', {
appealId: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID
},
name: {
allowNull: false,
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING(511)
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: …Run Code Online (Sandbox Code Playgroud) 我手动删除了迁移文件名20171125081136-create-task.js。
删除迁移文件后,我运行了此命令
db:migrate:undo:all
Run Code Online (Sandbox Code Playgroud)
运行此命令时,终端出现错误:
ERROR: Unable to find migration: 20171125081136-create-task.js。
由于此错误,我被卡住了,无法撤消存在的其他迁移文件。
我正在使用续集迁移。这是我的 config.js:
require('dotenv').config()
module.exports = {
development: {
database: process.env.DEV_DATABASE,
host: process.env.DEV_HOST,
dialect: 'postgres'
},
test: {
database: process.env.TEST_DATABASE,
host: process.env.TEST_HOST,
dialect: 'postgres'
},
production: {
database: process.env.DATABASE_URL,
dialect: 'postgres'
},
}
Run Code Online (Sandbox Code Playgroud)
当我部署到 heroku 并运行时:
heroku run npx sequelize-cli db:migrate
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Loaded configuration file "config/config.js".
Using environment "production".
ERROR: connect ECONNREFUSED 127.0.0.1:5432
Run Code Online (Sandbox Code Playgroud)
我尝试将我的配置更改为use_env_variable: DATABASE_URL为Error reading "config/config.js". Error: ReferenceError: DATABASE_URL is not defined
如果我console.log(process.env.DATABASE_URL)得到类似的东西:
postgres://bczwqcbnwftivi:80bbc89546c0953e0ffd221a950cac249d25d4ef1812127054af7c2f504b2c39@ec2-54-225-205-79.compute-1.amazonaws.com:5432/d8gsvl0n8qilcs
Run Code Online (Sandbox Code Playgroud) 我有这个 .sequelizerc 文件:
\n\nconst path = require('path');\n\nmodule.exports = {\n config: path.resolve('.', 'src/config/sequelizeCLIConfig.json'),\n 'migrations-path': path.resolve('.', 'db', 'migrations'),\n};\nRun Code Online (Sandbox Code Playgroud)\n\n然后我有一个 .ts 文件,它生成名为 的 cli 配置文件generateSequelizeCLIConfig.ts,它执行以下操作:
import path from 'path';\nimport fs from 'fs';\nimport config from '../../src/config';\nimport sequelizeRC from '../../.sequelizerc';\n\nconst env = process.env.NODE_ENV || 'development';\n\nconst targetFile = path.resolve(sequelizeRC.config);\n\nconst sequelizeCLIConfig: Record<string, any> = {};\nsequelizeCLIConfig[env] = config.db;\n\nfs.writeFile(targetFile, JSON.stringify(sequelizeCLIConfig, null, 4), err => {\n if (err) {\n return console.log(err);\n }\n\n console.log('The sequelizeCLI config file was saved at ' + targetFile + '!');\n});\nRun Code Online (Sandbox Code Playgroud)\n\n … node.js sequelize.js typescript sequelize-cli sequelize-typescript
我正在尝试在 Sequelize 中编写迁移并希望删除 defaultValue 约束。什么是正确的语法?我已经尝试了以下两种方法:
return queryInterface.removeConstraint('Table', 'table_columnName_default')
return queryInterface.removeConstraint('Table', 'columnName_default')
Run Code Online (Sandbox Code Playgroud)