Django和SQLAlchemy,哪个Python ORM更好?

ORM是什么?

在介绍Python下的两个ORM框架(Django和SQLAlchemy)的区别之前,我们首先要充分了解ORM框架的用途。

ORM代表对象关系映射。ORM中的每个单词解释了他们在实际项目中的用途:

对象(Object):这部分表示哪个对象或者在哪种编程语言下使用这个框架,例如Python。

关系(Relational):这部分表示你正在使用的RDBMS数据库(关系数据库管理器系统)。有许多流行的关系数据库,你可能使用以下这些:MSSQL、MySQL、Oracle、PostgreSQL、MariaDB、PerconaDB、TokuDB。关系数据库中最常见的是它们的关系结构(表,列,键,约束等)。

映射(Mapping):最后一部分表示前面两个部分之间的桥接和连接,即对象和数据库表。

因此,可以得到这样的结论:ORM的作用是将编程语言与数据库进行关联,以简化依赖于数据的应用程序的创建过程。

Django和SQLAlchemy的比较

活动记录与数据映射器

Django ORM使用了活动记录的实现:你能在大多数的ORM库中看到这个实现。这意味着数据库中的每一行记录都直接映射到代码中的一个对象,反之亦然。 ORM框架(如Django)不需要预定义模式来使用代码中的属性。你可以直接使用它们,因为框架可以通过查看数据库模式(schema)来“理解”结构。此外,你可以将记录保存到数据库中,因为它映射可以到表中的某个特定行。

SQLAlchemy使用了数据映射器的实现:在使用这种实现时,数据库结构和对象结构之间是分离的(它们不像Active Record实现中那样的一一对应)。在大多数情况下,你必须使用另一个持久层来保持与数据库的交互(例如,保存对象)。所以你不能在使用Active Record实现的时候调用save()方法,但另一方面,你的代码无需知道数据库中的整个关系结构,因为代码和数据库之间没有直接的关系。

那么他们中的哪一个赢得了这场战斗呢?没有。因为这取决于你要完成什么样的任务。我认为,如果你的应用程序大部分只需用到CRUD(创建,读取,更新,删除),不同数据实体之间并没有复杂的规则,则应该使用Active Record实现(Django)。它能让你轻松快速地为你的产品设置MVP,而不会有任何麻烦。如果你的应用程序中有很多“业务规则”和限制,你最好使用数据映射器模型,因为它不会绑架你,强迫你严格按照活动记录的方式进行思考。

用于复杂查询

在某些情况下,Django和SQLAlchemy可以一起使用。在实际的项目中我多次看到Django用于所有常规的CRUD操作,而SQLAlchemy用于更复杂的查询,通常是只读查询。

有关这方面更多的信息和示例,请参阅BetterWorks工程博客(我们没有与他们联系,我们只是喜欢他们的博客帖子:))。

自动创建主键

两个框架的另一个区别是,Django可以为你的表自动创建主键,而SQLAlchemy不会这么做。你必须自己为每个表手动创建主键。你认为谁最了解哪个主键最适合于某个数据库表呢? 根据你的团队的知识和经验,你可以自行决定。

自动提交

默认情况下,Django会自动提交,而SQLAlchemy则不会。这会影响到你使用框架的方式(事务,回滚等)。

支持的数据库

Django和SQLAlchemy都可以与MySQL、PostgreSQL、Oracle和SQLite一起使用。如果你正在使用MSSQL,则应该使用SQLAlchemy,因为它完全支持MSSQL,并且你能找到更多的相关信息和文档。

学习曲线

在网络上有一个很普遍的观点:Django更容易学习。这可能很容易就能看出来,因为它通常用于不怎么复杂的例子。所以,你应该考虑一下你愿意花多少精力在框架的学习上,以此来获得使用SQLAlchemy所带来的更多的灵活性(如果你真的需要它的话)。

社区规模

毫无疑问,SQLAlchemy拥有所有Python ORM框架中的最大的社区。如果社区对你来说很重要(我认为应该是),SQLAlchemy应该是你的选择。这并不意味着你找不到Django等其他框架的任何帮助。你也能收到错误修复、StackOverflow中的问题解答以及你需要的任何其他帮助,但如果使用SQLAlchemy的话,你获取帮助的机会更大。

性能

我认为在这里写这个(X比Y快)是不负责任的。 由于ORM具有非常多的特性和功能,并且它们在每个框架中都是不同的,所以很难得出哪个框架快哪个框架慢的结论。根据我的经验,你使用框架功能的方式会对应用程序数据库层的整体性能产生很大的影响。所以,我建议不要因为框架的性能而选择它,而是要学习如何正确地使用框架并充分利用它。

如果你使用ORM框架运行原始的SQL查询,则可以使用Jooq或对某些查询不使用ORM,你还可以看看EverSQL查询优化器,这可能是最简单的优化查询的方法。

总结对于任何的比较,我认为最好是留给读者自己做决定。每个例子都是不同的,不同的技术适合不同的例子。看一下上面指出的那些差异,告诉我们你最终做出的决定。

---------------------
原文:Django vs SQLAlchemy – Which Python ORM is better?
作者:EverSQL团队 
翻译:雁惊寒
 

原文地址:https://www.cnblogs.com/lzc978/p/10259433.html

时间: 2024-07-30 11:33:42

Django和SQLAlchemy,哪个Python ORM更好?的相关文章

我想没有哪篇文章比我这篇python入门更完整更系统更全面了吧!

随着人工智能.大数据的时代到来,学习Python的必要性已经显得不言而喻.我经常逛youtube,发现不仅仅是以编程为职业的程序员,证券交易人员,生物老师,高级秘书......甚至许多自由撰稿人,设计师都在学习Python. ,我一点也没有言过其实.对于学习Python的重要性,这里不再赘述.今天整理的教程,是给零基础的同学入门Python.创一个小群,供大家学习交流聊天如果有对学python方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学python能

Python ORM 实现及python在linux下连接oracle

ORM “Object Relational Mapping”,即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句. orm模块:orm.py #!/usr/bin/env python # -*- coding: utf-8 -*- ' Simple ORM using metaclass ' __author__ = 'Michael Liao' class Field(object): def __init__(sel

Python3+SQLAlchemy+Sqlite3实现ORM教程

一.安装 Sqlite3是Python3标准库不需要另外安装,只需要安装SQLAlchemy即可.本文sqlalchemy版本为1.3.13 pip install sqlalchemy 二.ORM操作 除了第一步创建引擎时连接URL不一样,其他操作其他mysql等数据库和sqlite都是差不多的. 2.1 创建数据库连接格式说明 sqlite创建数据库连接就是创建数据库,而其他mysql等应该是需要数据库已存在才能创建数据库连接:建立数据库连接本文中有时会称为建立数据库引擎. 2.1.1 sq

[转]django 1.9之后python manage.py syncdb没有了

django 1.9之后 python manage.py syncdb 改成了 python manage.py migrate 或者 python manage.py makemigrations

django 1.9之后python manage.py syncdb没有了

django 1.9之后 python manage.py syncdb 改成了 python manage.py migrate 或者 python manage.py makemigrations

11招玩转黑客攻防——用Python,更安全

Python真是无所不能,学习Python,一个暑假就够了 !! 入门Python,从黑客入手最好玩.最简单 !! 今天就推荐一本书<11招玩转网络安全——用Python,更安全> 内网攻防 外网攻防 无线网破解 Web服务器攻防 数据服务器攻防 如何更安全?如何用Python玩?北京科技大学的硕士告诉你. 原文地址:https://www.cnblogs.com/liqiang001/p/9260796.html

怎么让你的Python代码更优雅!

3 个可以使你的 Python 代码更优雅.可读.直观和易于维护的工具. Python 提供了一组独特的工具和语言特性来使你的代码更加优雅.可读和直观.为正确的问题选择合适的工具,你的代码将更易于维护.在本文中,我们将研究其中的三个工具:魔术方法.迭代器和生成器,以及方法魔术. 加vx:tanzhouyiwan 免费领取Python学习资料 魔术方法 魔术方法可以看作是 Python 的管道.它们被称为"底层"方法,用于某些内置的方法.符号和操作.你可能熟悉的常见魔术方法是 __ini

Django应用app创建及ORM

一.重要知识点回顾: 1. form表单提交数据的注意事项: 1. 是form不是from,必须要有method和action (action用来指定你的数据提交到后台哪个地方,method用来指定你提交数据的方式) 2. 所有获取用户输入的表单标签要放在form表单里面,表单标签必须要有name属性 (name属性在后台会作为key来取出对应的输入内容) 3. form表单必须要有submit按钮 (将form表单包含的所有输入信息提交至action所指向的地址) 2. GET和POST 什么

Python 小试牛刀,Django详细解读,让你更快的掌握它!!!

一.MVC和MTV模式 MVC:将web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求. Django的MTV模型本质上与MVC没有什么差别,也是各组件之间为了保持松耦合关系,只不过定义上有些不同,Django的MTV分别是: • Model(模型):负责业务对象与数据库的对象(ORM) • Template(模板):