【问题标题】:Is there a way to auto create a databse in typeORM?有没有办法在 typeORM 中自动创建数据库?
【发布时间】:2020-03-25 04:52:24
【问题描述】:

我正在从 sequelizeORM 迁移到 typeORM。在 sequelize-cli 中有很好的命令来删除数据库并创建一个新的,例如:

node_modules/.bin/sequelize db:drop
node_modules/.bin/sequelize db:create
node_modules/.bin/sequelize db:migrate

好的,对于 typeORM,我知道如何运行迁移,但我无法在任何地方找到如何自动创建或删除数据库。提前 Tnx。

【问题讨论】:

    标签: node.js nestjs typeorm


    【解决方案1】:

    您可以使用 CLI 工具 typeorm schema:drop 或者如果您想在每次启动时删除并重新创建数据库,您可以使用

    {
    ...
      dropSchema: true,
    ...  
      "migrations": [
        "dist/migrations/**/*.js"
      ]
    }
    

    您在哪里执行连接选项并设置迁移路径,等等。

    【讨论】:

    • 注意不要在生产环境中使用!!!
    • 应始终小心处理生产环境 ??‍♂️ 尽管如果您有种子并且“runMigrations: true”,您可能能够侥幸逃脱,具体取决于具体情况
    • 它真的回答了这个问题吗?创建数据库的方法是什么?
    • @РоманСоляник 设置 'dropSchema: true' 会在应用程序启动时删除数据库,之后使用实体和迁移指定的数据库(假设 runMigrations 设置为 true)创建。所以实际上它是一种“删除和重新创建”。
    【解决方案2】:

    您也可以使用typeorm-extension 包,以createdrop 为连接指定的数据库,用于几乎所有数据库驱动程序。 该包还解析了额外参数charsetcharacterSet的额外参数(ENV:TYPEORM_DRIVER_EXTRA)

    import {createDatabase} from "typeorm-extension";
    
    (async () => {
        await createDatabase({ifNotExist: true});
       
        await dropDatabase({ifExist: true});
    
        process.exit(0);
    })();
    

    您还可以提供charsetcharacterSet 作为createDatabase() 函数的第一个参数的属性。 F.e

    • postgres
    createDatabase({ifNotExist: true, characterSet: "UTF8"});
    
    • mysql
    createDatabase({ifNotExist: true, charset: "utf8mb4_general_ci", characterSet: "utf8mb4"});
    

    如果您有任何问题或疑虑,请随时与我联系或通过Github为代码库贡献代码

    【讨论】:

    • 在生产环境中使用此库时要小心,库中任何不需要的更改都可能会破坏您的数据库!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2020-05-19
    • 2021-04-06
    • 1970-01-01
    • 2021-03-04
    • 2023-01-12
    相关资源
    最近更新 更多