可以使用Sequelize连接到新数据库吗?

时间:2020-07-23 10:13:56

标签: node.js database sequelize.js database-connection

在设计一个简单的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连接到 新的(不存在的)数据库?

2 个答案:

答案 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
  );
}