如何将 DBD::Proxy 与 DBIx::Class 一起使用?

发布于 2024-07-09 00:29:09 字数 219 浏览 9 评论 0原文

我需要通过防火墙获得数据库连接,并限制可以运行的查询。 DBD::Proxy 似乎是完美的解决方案。 但是,我目前正在使用 DBIx::Class,并且不知道如何将它们连接在一起。

特别是,DBD::Proxy 不使用 SQL; 它需要特定的命名查询。 但 DBIx::Class 似乎没有办法调用这些命名查询。

这是基于 Catalyst 的 Web 应用程序内部。

I need to get a database connection through a firewall, and also limit what queries can be run. DBD::Proxy seems to be the perfect solution for this. However, I'm currently using DBIx::Class, and can't figure out how to hook them together.

In particular, DBD::Proxy doesn't take SQL; it takes particular named queries. But DBIx::Class doesn't seem to have a way to invoke those named queries.

This is inside a Catalyst-based webapp.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小瓶盖 2024-07-16 00:29:09

DBD::Proxy 确实采用 SQL。 为了方便起见,它允许命名查询。

没有方便的方法将 DBIx::Class 与 DBD::Proxy 命名查询一起使用,因为 DBIx::Class 对象关系映射器 (ORM) 的目的是提供 SQL 数据操作语言 (DML) 的面向对象视图) 陈述。 DBD::Proxy 的命名查询功能不是 DML 语句,因此 DBIx::Class 没有适合您需求的功能:将文字字符串直接传递到 DBD::Proxy 驱动程序的prepare() 函数。

一些不方便的方法:

  1. 不要使用 DBIx::Class。 只需在 DBI 中执行即可。 您可以使用 Catalyst::Model::DBI,或普通 DBI + Catalyst::Model::Adaptor + 您自己的模型类。

  2. 不要使用命名查询。 这意味着,如果您计划使用命名查询作为控制对数据库的访问的方式,那么您需要移动查询授权
    将逻辑添加到调用控制器或模型内的数据库的代码中,具体取决于您构建应用程序的方式。

DBD::Proxy does take SQL. It allows for named queries as a convenience.

There is no convenient way to use DBIx::Class with DBD::Proxy named queries, since the purpose of the DBIx::Class Object-Relational Mapper (ORM) is to present an object-oriented view of SQL's Data Manipulation Language (DML) statements. The named query feature of DBD::Proxy is not a DML statement, so DBIx::Class does not have feature that suit your needs: passing a literal string directly to the prepare() function of your DBD::Proxy driver.

Some inconvenient ways:

  1. Don't use DBIx::Class. Just do it in DBI. You could use Catalyst::Model::DBI, or plain DBI + catalyst::Model::Adaptor + your own model class.

  2. Don't use named queries. This means that if you were planning to use named queries as a way to control access to the database, then you'll need to move the query authorization
    logic into the code that makes the call to the database inside your controller or model, depending on how you built your application.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文