gpt4 book ai didi

sql-server - 用于简化 SQL 查询的 Perl 模块

转载 作者:行者123 更新时间:2023-12-02 06:40:31 26 4
gpt4 key购买 nike

多年来,我注意到 Perl 脚本中的 SQL 查询存在一些问题:

  • 它们很难读
  • 大多数开发人员并不真正擅长 SQL。

假设我有以下表格:

PET          PET_TYPE     COLOR
======== ========== ============
PET_ID PET_TYPE COLOR_ID
Name Description Description
Owner
PET_TYPE
COLOR_ID

而且,我想找到所有的红狗,我必须生成以下 SQL 查询。

FIND PET_ID, Name, Owner
FROM PET, PET_TYPE, COLOR
WHERE COLOR_ID.Description = 'RED'
AND PET_TYPE.Description = 'DOG'
AND PET.COLOR_ID = COLOR.COLOR_ID
AND PET.PET_TYPE = PET_TYPE.PET_TYPE

我想要一个可以简化查询生成的 Perl 模块。允许我创建数据库连接,然后预定义表链接方式的东西。一旦完成,开发人员所要做的就是简化查询。

我把界面想象成这样:

  #
# Create a new Database Connection
#

my $db = Some:Module->new(\%options);

#
# Now describe how these tables relate to each other.
# It should be possible to reuse this information for
# multiple queries. Maybe even make this a subroutine
# or company wide Perl module that will do this for
# the developer.
#
$db->link_tables (
PET => "COLOR_ID",
COLOR => "COLOR_ID
);

$db->link_tables (
PET => "PET_TYPE",
PET_TYPE => "PET_TYPE",
);

#
# Now that you've created a link to the database,
# and you've describe how the tables relate to
# each other, let's create a query. I'm not 100%
# sure of the interface, but it'll be something
# like this. There might be multiple `query`
# statements.
#

my $query = $db->query (
PET_TYPE => "Description = DOG",
COLOR => "Description = RED"
);

#
# Now, execute this query
#
$db->execute_query;

while (%row = $db->fetch) {
say "Dog's name is $row{Pet.Name}";
say "The owner is $row{Pet.Owner}";
}
#
# Let's find all cats named Wiskers.
# We've already described the links,
# so that doesn't have to be redone.
#
my $query = $db->query (
PET_TYPE => "Description = CAT",
PET => "Name = Wiskers"
);

我知道我的描述不完整,无论模块如何完成,都必须有一些紧急逃生口,您可以在其中进行原始 SQL 查询。但是,我们的想法是将程序集中在您想要的内容上(我想要名为 whiskers 的红狗或猫),而不是各种字段,并将大部分 Where 子句用于描述表之间的链接。这将使编程更容易,也更容易理解程序。

如果没有执行此操作的此类模块,我将生成一个。但是,在花几周时间进行这项工作之前,我想确保我没有重复任何工作。

最佳答案

我认为您正在寻找的是 ORM,并且有很多这样的东西。虽然不完全是您所描述的,但它在功能方面非常接近。看看 Class::DBI 和 DBIx::Class,或者只是在谷歌上搜索 perl ORM。

关于sql-server - 用于简化 SQL 查询的 Perl 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com