如何使用 Yesod/Persistent 访问两个不同的数据库服务器?

Posted

技术标签:

【中文标题】如何使用 Yesod/Persistent 访问两个不同的数据库服务器?【英文标题】:How to access two different database servers with Yesod/Persistent? 【发布时间】:2017-07-21 21:06:21 【问题描述】:

我正在使用 Yesod 和 Persistent 构建网站(我正在使用基本的 yesod mysql 脚手架)。 我需要访问主数据库,但 runDB 使用的其他数据库 默认连接参数和连接。有没有一种简单的方法来使用具有两个不同连接参数的 Persistent ?

【问题讨论】:

【参考方案1】:

创建连接的函数(如runSqlite)在IO monad 中。这意味着您可以使用 liftIO 在 Yesod 应用程序中的 Handler 函数中调用它。您还可以立即对数据库运行查询,这非常简洁。

【讨论】:

【参考方案2】:

查看脚手架代码,应该很容易定义另一个rundDB 访问另一个使用不同连接参数创建的池。这意味着还要修改Settings 以读取和存储额外的连接信息。 但是,主要问题之一是,需要根据要加载的数据类型记住要使用哪个连接(或 runDB)。另一种解决方案是使用联合表。 MySql(或 MariaDB)允许创建连接到远程数据库的代理表。尽管它需要一些设置,但这样做的好处是在客户端安全且易于使用。

【讨论】:

以上是关于如何使用 Yesod/Persistent 访问两个不同的数据库服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Yesod/Persistent 创建外键约束?

Yesod Persistent - 如何将 Day 与 UTCTime 进行比较? (如何转换它们?)

Yesod / Persistent中的外键约束?

Yesod/Persistent 实体派生 Show

Yesod/Persistent 字段与 Eq

了解 Yesod Persistent TH 生成的代码