在语言之间共享 ORM

Posted

技术标签:

【中文标题】在语言之间共享 ORM【英文标题】:Sharing an ORM between languages 【发布时间】:2017-02-09 18:53:19 【问题描述】:

我正在创建一个包含数据的数据库。该数据库有两个客户:1) 一个 .NET 网络服务器,它以某种方式使数据对用户可见。 2) 创建数据并填充表格的 python 数据挖掘器。

我有几个选择。我可以使用 .NET Entity Framework 创建数据库,然后在 python 端对其进行逆向工程。我可以反之亦然。我可以在一个系统或其他系统中编写原始 SQL 语句,或两者兼而有之。以这种方式或另一种方式做这件事有哪些可能的陷阱?例如,我担心如果我使用 python ORM 创建表,那么我将在 .NET 空间中遇到困难......

【问题讨论】:

对于python,您可能需要查看SQLAlchemy automapdjango inspectdb。虽然两者都有一些限制。 我知道这些是东西,但根据我的经验,这些功能被设计为“运行一次,然后在未来使用 Code First”。我只能用一种或另一种语言“代码优先”,所以我每天都会进行 SQLAlchemy 自动映射。谁让这更容易,automap 还是 inspectdb? 我不知道,虽然 SQLAlchemy 自动映射似乎更短暂,因为它是按需反映的。解决这个问题的另一种方法是让数据挖掘者通过网络服务器提供的 API 读取/写入数据库。然后,数据挖掘器将与其对底层数据库层的关注分离。只是我的两分钱。 【参考方案1】:

我喜欢这样的问题。 这是您必须考虑的,您的网站必须快速,而大多数网站的瓶颈是数据库。您的问题的答案是 - 让 .NET 可以轻松地使用 SQL。这将需要更多使用 python 的工作,比如指定表的名称,也许是行名。我认为 Django 和 SQLAlchemy 都对此有好处。

另一种解决方案可能是在收集数据的数据库和显示数据的数据库之间架起一座桥梁。在后台,您可以有一个任务/作业将收集的数据迁移到您的主数据库。这也是一种选择,会让你的工作更轻松,至少所有特定于数据库的奇怪代码都将转到第三个组件。

在我切换到 python 之前,我已经使用 .NET 很长时间了,您应该知道,无论您选择什么策略,都可以使用语言和 ORM 处理数据。用您更熟悉的语言完成工作中最困难的部分。如果您是 Python 开发人员 - 选择 python 来处理表和行的正确名称。

【讨论】:

以上是关于在语言之间共享 ORM的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET 语言之间共享类方法

在不同语言的进程之间有效地共享数据

c语言如何在多个源文件之间共享一个变量及其值?

如何在 Ruby 和另一种语言之间共享文本文件(或互斥体/信号量)?

在 C 语言中使用 POSIX 在多个进程(不是线程,仅进程)之间共享二进制信号量

在没有网桥的情况下在JavaScript和ActionScript库之间共享代码