首页 > 解决方案 > 如何从 sql 文件运行 typeorm mysql 命令?

问题描述

我想在从 sql 文件迁移时运行 mysql 命令。有人可以帮助我,如何解决?

import {MigrationInterface, QueryRunner} from "typeorm";
import * as fs from "fs";

var queries = fs.readFileSync(__dirname + '/geoinfo.sql').toString()
    .replace(/(\r\n|\n|\r)/gm," ") // remove newlines
    .replace(/\s+/g, ' '); // excess white space

export class HungarianStatesAndCities1564393283405 implements MigrationInterface {

    public async up(queryRunner: QueryRunner): Promise<any> {
        await queryRunner.query(queries.toString() );
    }

    public async down(queryRunner: QueryRunner): Promise<any> {
        await queryRunner.query("");
    }
}

标签: mysqlnestjstypeorm

解决方案


您可以使用“;”的拆分查询 并运行单个查询

const readSqlFile = (filepath: string): string[] => {
      return fs
        .readFileSync(path.join(__dirname, filepath))
        .toString()
        .replace(/\r?\n|\r/g, '')
        .split(';')
        .filter((query) => query?.length);
    };

public async up(queryRunner: QueryRunner): Promise<void> {
    const queries = readSqlFile('/geoinfo.sql');

    for (let i = 0; i < queries.length; i++) {
      await queryRunner.query(queries[i]);
    }
  }

推荐阅读