|
|
1
9
你想看看 Fey 。我几个月前开始在工作中使用它,虽然由于年龄较小,实施仍然有一些困难,但它背后的想法是坚实的。例如,从手册中轻松改编一个查询:
现在你可以写一个这样的函数:
这将从添加一个内部连接
但是这个
最后你说
因此,基本上Fey为您提供了原生SQL所缺少的抽象功能。您可以从查询中提取可重用的方面,并将其打包为单独的函数。 |
|
|
2
7
请不要编写自己的ORM。使用类似的东西 DBIx::Class . 您提到的所有这些问题都已得到解决,并且该实现已在数千个其他应用程序中进行了测试。坚持编写你的应用程序,而不是重新实现库。你可能不会真的 使用 DBIC在你的应用程序中,但你应该看看它的实现方法;特别是它如何增量构建ResultSets(不是结果集,而是延迟查询)。 |
|
|
3
5
如果你 do not 的常用口语形式 想要一个ORM,但你想在没有直接字符串操作/连接的情况下从位组装SQL,看看 Fey ,这可能会做你想做的事。 更新:Aristotle Pagaltzis的回答要好得多。他实际上给出了Fey的样子以及它如何帮助的例子。 |
|
|
4
1
从纯粹的编码角度来看,你手头有一段又长又复杂的代码。你不喜欢,为什么?我只能假设其中存在一些代码重复。否则,有什么不喜欢的呢?因此,重构它以消除重复。..我知道这听起来很老套,但既然你不发布代码,就很难更具体了。可能有一个对象具有from、where和insert子句的方法,这样SQL的基础结构就不会重复?我确实不知道该怎么办,但消除重复是关键。 |
|
|
5
1
除非我误解了,否则这似乎是一个ETL(提取/转换/加载)应用程序,它还没有找到将三个阶段分开的方法。 如果输出模型只有一两个表,那么您可能也可以使用SQL。否则,特别是如果你插入的表之间存在关系,一个好的ORM应该能简化事情。 采用50个状态的想法,你真的无法摆脱50个“提取”进程,希望有一个共享例程库。我会一次处理一个输入源的问题,在添加新输入源时进行重构,但要小心封装可变部分,这样当供应商更改其格式时,我就确切地知道需要在哪里进行更改。 “转换”部分不应该太繁重:只需把你得到的东西准备好输出即可。 |
|
6
0
我认为您描述的是动态SQL——在运行时以编程方式构建请求。这是LINQ to SQL和LLBLGenPro等对象关系映射器的一个常见功能。建造一个不是一项小任务。 通常,ORM对象化SQL语言。您编写了一种“SQL文档对象模型(DOM)”,它允许您通过将SQL查询表示为(例如)“请求”对象来以编程方式构建SQL查询。然后,您可以在Request对象上设置属性,如Column集合、Table集合和Join集合(这些只是一种方法的示例)。结果将是一个SQL请求字符串,作为Request对象的属性公开。 您还必须使Request对象能够读取数据源的模式定义。您提到WHERE子句依赖于类型。因此,您的SQL汇编器必须能够读取模式并适当地构建子句。 这对你的案子来说可能太过分了。我认为最根本的问题是,你绝对需要动态SQL查询,还是有一个不太复杂的选项可以满足你的要求? |
|
|
7
0
在我看来,您解决这个问题的方法可能需要考虑一下。您目前有多个数据源,需要将其视为单个数据源。那么,为什么要将它们作为单独的数据源呢? 根据数据更新的频率(或查看性能,访问频率),您可以将数据组合到SQLite等临时数据源中。如果每个州的数据都有一个转换器,可以将其从格式a转换为SQLite表中的通用格式,那么您可以使用您选择的方法来访问它。 这种方法还允许灵活性,因为您的数据访问需求可能会发生变化。例如,如果你被问到这样一个问题:“每个州有多少金发司机被开了超速罚单?”。SQLite数据库可以通过一个命令来实现这一点,而其他解决方案可能需要返回一组数据,然后需要对这些数据进行解析、分组和设置以供输出。 |
|
|
8
-5
如果你不想处理ORM,我经常有这样的代码:
简单,不需要ORM,非常可定制。另外,我总是觉得ORM对于我处理的大量数据来说太重了,但这是另一个问题。 |
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |