首页 > 解决方案 > NestJS + MySQL:如何在不设置实体的情况下连接多个数据库

问题描述

NestJS 关于数据库的文档解释了如何使用 TypeORM 连接到 MySQL 并定义实体。

就我而言,我必须连接到具有多个数据库的 MySQL 服务器,并且我需要直接执行 SQL 查询(不使用实体层)并获取它们的结果。有时我还需要运行跨数据库查询

如何使用NestJS做到这一点?

标签: mysqlsqltypescriptnestjscross-database

解决方案


您可以通过给定连接不同的名称来导入多个数据库。您可以直接在单独的TypeOrmModule.forRoot({...})导入中传递数据库配置,也可以使用ormconfig.json配置文件。(但是,该ormconfig.json文件可能仍然无法与多个数据库一起使用,请参阅此线程。)

TypeOrmModule.forRoot({
  ...defaultOptions,
  name: 'personsConnection',
  ^^^^^^^^^^^^^^^^^^^^^^^^^^
  host:  'person_db_host',
  entities: [Person],
}),
TypeOrmModule.forRoot({
  ...defaultOptions,
  name: 'albumsConnection',
  ^^^^^^^^^^^^^^^^^^^^^^^^^
  host:  'album_db_host',
  // You can also leave the entities empty
  entities: [],
})

正如 Kamil 在评论中所述,您可以注入 TypeORMconnection对象, @InjectConnection('albumsConnection'): Connection然后使用QueryBuilderor 方法query运行原始 SQL。

const rawData = await connection.query(`SELECT * FROM USERS`);

推荐阅读