在设计一个简单的node.js项目时,我尝试使用Sequelize通过以下配置参数连接到mysql服务器:
{ dbname: users
username: jimmy
password: users
params:
host: localhost
port: 3306
dialect: mysql }
尽管'users'数据库尚不存在。
我收到服务器错误:
InternalServerError: {"name":"SequelizeConnectionError","parent":{"code":"ER_BAD_DB_ERROR","errno":1049,"sqlState":"42000","sqlMessage":"Unknown database 'users'"},"original":{"code":"ER_BAD_DB_ERROR","errno":1049,"sqlState":"42000","sqlMessage":"Unknown database 'users'"}}
但是Sequelize文档:Manual | Sequelize表示Sequelize可以连接到新数据库。请,如何使用Sequelize连接到 新的(不存在的)数据库?
答案 0 :(得分:2)
您应该再次仔细阅读documentation(因为措辞确实令人困惑!)。
新数据库与现有数据库
如果要从头开始项目,但是数据库尚不存在,请进行Sequelize 从一开始就可以使用,以自动创建 数据库中的每个表。
此外,如果要使用Sequelize连接到以下数据库, 已经充满了表格和数据,效果很好!续集有 在这两种情况下都可以使您满意。
它将仅连接到现有数据库,如果尚不存在表,则可以通过创建表来帮助您,但是必须存在数据库以便后续连接。
按照这个问题,我写了this PR来更新文档以减少混乱。希望对您有帮助!
答案 1 :(得分:1)
在SO上找到一个similar problem,并在osifo处找到答案:
//create the sequelize instance omitting the database-name arg
const sequelize = new Sequelize("", "<db_user>", "<db_password>", {
dialect: "<dialect>"
});
return sequelize.query("CREATE DATABASE `<database_name>`;").then(data
=> {
// code to run after successful creation.
});
因此,我能够用自己的代码实现它:
var SQUser;
var sequlz;
async function connectDB() {
sequlz =
new Sequelize("", "jimmy", "users", {host: "localhost", port: 3306, dialect: "mysql"});
await sequlz.query("CREATE DATABASE users;");
await sequlz.query("Use users;");
SQUser = sequlz.define('Table',
{
// define table schema
});
return SQUser.sync();
};
//use sequelize to populate the table
async function create() {
const SQUser = await connectDB();
return SQUser.create(
//values
);
}