mysql - NestJS + MySQL:如何在不设置实体的情况下连接多个数据库
问题描述
NestJS 关于数据库的文档解释了如何使用 TypeORM 连接到 MySQL 并定义实体。
就我而言,我必须连接到具有多个数据库的 MySQL 服务器,并且我需要直接执行 SQL 查询(不使用实体层)并获取它们的结果。有时我还需要运行跨数据库查询。
如何使用NestJS做到这一点?
解决方案
您可以通过给定连接不同的名称来导入多个数据库。您可以直接在单独的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
然后使用QueryBuilder
or 方法query
运行原始 SQL。
const rawData = await connection.query(`SELECT * FROM USERS`);
推荐阅读
- html - 允许 CSS Grid 随窗口垂直增长,填充剩余空间
- java - 使用实时数据使领域数据保持最新
- java - 拒绝未指定安全限制的端点处理的 http 请求
- java - 如何为所有控制器和页面仅绑定一次共享片段的数据?
- laravel - Laravel 如何处理同时调度的多个命令任务?
- ruby - Cloud9-ide,Ruby-On-Rails4,“XML 解析错误:语法错误位置:https://api.c9.io/settings/state/6148410?access_token=9cwbfW5wFe2pHewHk2u0”
- android - Xamarin.Forms:从 2.3.4 升级到 3.0 导致 Android 内容超出底部
- isis - 从 v1.12.2 迁移的 Apache Isis 构建失败。未知存储库应用程序用户,
- java - 方法返回缓存结果而不是去数据库
- mustache - 忽略从 Mustache 模板中的父上下文继承的属性