NestJS + MySQL:如何在不设置实体的情况下连接多个数据库
Posted
技术标签:
【中文标题】NestJS + MySQL:如何在不设置实体的情况下连接多个数据库【英文标题】:NestJS + MySQL: how to connect to multiple databases without setting entities 【发布时间】:2019-05-19 00:00:15 【问题描述】:NestJS documentation about Databases 解释了如何使用 TypeORM 和定义实体连接到 mysql。
就我而言,我必须连接到具有多个数据库的 MySQL 服务器,并且我需要直接执行 SQL 查询(不使用实体层)并获取它们的结果。有时我还需要运行跨数据库查询。
如何使用NestJS 做到这一点?
【问题讨论】:
参见“多个数据库”部分:docs.nestjs.com/techniques/database。每个连接都有自己的名称,您可以使用 @InjectConnection('name') 将连接实例注入到类中(并且连接具有使您能够执行普通 SQL 查询的方法) @KamilMyśliwiec 谢谢,但我可以在TypeOrmModule
中将一个空数组[]
作为entities
传递吗?
【参考方案1】:
您可以通过给连接不同的名称来导入multiple databases。您可以直接在单独的 TypeOrmModule.forRoot(...)
导入中传递数据库配置,也可以使用 ormconfig.json
配置文件。 (但是,ormconfig.json
文件可能仍然无法与多个数据库一起使用,请参阅此thread。)
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 在 cmets 中所述,您可以使用 @InjectConnection('albumsConnection'): Connection
注入 TypeORM connection
对象,然后使用 QueryBuilder
或方法 query
运行原始 SQL。
const rawData = await connection.query(`SELECT * FROM USERS`);
【讨论】:
TypeOrmModule.forRoot() 给了我一个打字稿错误“不能分配给'TypeOrmModuleOptions'类型的参数”,所以我使用了TypeOrmModule.forRootAsync(),一切顺利以上是关于NestJS + MySQL:如何在不设置实体的情况下连接多个数据库的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 TypeOrm 的 NestJS 连接 MySQL 数据库时出现问题