【问题标题】:Can Sequelize be used to connect to a new database?Sequelize 可以用来连接新数据库吗?
【发布时间】:2020-11-13 00:56:00
【问题描述】:

在设计一个简单的 node.js 项目时,我尝试使用 Sequelize 使用以下配置参数连接到 mysql 服务器:

{ dbname: users
  username: jimmy
  password: users
  params:
    host: localhost
    port: 3306
    dialect: mysql }

虽然“用户”数据库还不存在。
我收到服务器错误:

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 连接到 新的(不存在的)数据库?

【问题讨论】:

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


    【解决方案1】:

    您应该再次仔细阅读documentation(因为措辞确实令人困惑!)。

    新数据库与现有数据库

    如果您从头开始一个项目,并且您的数据库还不存在,Sequelize 可以从一开始就使用,以便自动创建 数据库中的每个表。

    另外,如果你想使用 Sequelize 连接到一个数据库 已经填满了表格和数据,也可以!续集有 在这两种情况下都能满足您的需求。

    它只会连接到现有的数据库,如果它们还不存在,它可以通过创建表来帮助您,但数据库必须存在才能让 sequelize 与它连接。

    在这个问题之后,我写了this PR 来更新文档以减少混乱。希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      在 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
        );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-10
        • 1970-01-01
        • 2021-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        相关资源
        最近更新 更多