练习 45:创建 ORM

原文:Exercise 45: Creating an ORM

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

这本书的 SQL 部分的最后一个练习是一个很大的跳跃。你使用一个数据库知道了 SQL 语言的基础知识。你也应该精通 Python 的 OOP。现在是时候组合这两个,并创建一个对象关系管理器(ORM)。ORM 的工作是,使用简单的 Python 类,并将它们转换为数据库表中存储的行。如果你曾经使用过 Django,那么你已经使用他们的 ORM 来存储数据。在本练习中,你将尝试逆向分析如何实现它。

挑战练习

在现实世界中,如果一个为我工作的程序员打算创建自己的 ORM,我会说:“没门,使用现有的。”工作环境不同于教育环境,因为有人付钱让你完成一些事情。使用你的工作时间,来创造一个不能使你的雇主受益的事情,这是不正当的。但是,你自己的个人时间全部是你的,作为初学者,你应该尝试重新创建尽可能多的经典软件。

创建一个 ORM 将会让你了解许多问题,关于面向对象概念和 SQL 之间的不一致。有许多 SQL 可以建模的东西,而类经常卡在这里。还有一个问题,SQL 中的一切都是表。尝试创建自己的 ORM 将会让你深入了解 SQL 和 OOP,我建议花费大量的时间,尽你所能制作一个最好的 ORM。

你在 ORM 中应实现的一些主要功能有:

  • 从外部传递字符串到 ORM 应该是安全的。如果你使用 F 字符串来制作你的 SQL,那么你就错了。原因是,如果你执行f"SELECT * FROM {table_name},那么有人可以从外部将table_name设置为 SQL,例如person; DROP TABLE person。你的数据库很可能以这种方式运行,销毁所有内容或更糟。有些数据库甚至允许你在 SQL 中运行系统命令,这被称为“SQL 注入”,你不应该在 ORM 中引入它。
  • 所有的 CRUD 操作,但在 Python 中实现。我建议你跳过CREATE TABLE部分,直到你让其他的一切正常工作。简单的INSERTSELECTUPDATEDELETE是易于制作的,但是从类定义创建数据库纲要涉及到一些主流的 Python 黑魔法,使其真正有效。使用手工制作的.sql文件创建你的数据库,然后一旦让其他东西正常工作,你可以尝试纲要系统来替换.sql文件。
  • 将 Python 类型匹配到 SQL 类型以及新类型,来处理 SQL 类型。你可能会发现,你必须做一些杂技,将 Python 数据类型放到 SQL 表中。也许这太痛苦了,所以你最终会自己制作数据类型。这就是 Django 做的事情。
  • 事务是一个高级话题,但如果你可以实现它就试一试。

我也会说,在这个练习中,你可以从任意数量的项目借鉴功能。在设计时,请随意查看 Django 的 ORM。最后,我强烈建议你首先仅仅实现一个 ORM,它可以处理你在本书的这个部分创建的小型数据库。一旦你得到一个可以处理这个数据库的东西,就可以将其推广到任何数据库。

深入学习

本书开头提到了,Joe Celko 的《”Smarties” SQL》将会让你了解,你需要了解的 SQL 的每一件事情。Joe 的书很好,会让你远远超出这个小型速成课。

笨办法学 Python · 续 练习 45:创建 ORM相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  3. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  4. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 练习 22:后缀数组

    练习 22:后缀数组 原文:Exercise 22: Suffix Arrays 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我想告诉你一个关于后缀数组的故事.在一段时间里, ...

  8. 笨办法学 Python · 续 练习 39:SQL 创建

    练习 39:SQL 创建 原文:Exercise 39: Creating with SQL 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 当我们谈论首字母缩写"CR ...

  9. 笨办法学 Python · 续 第三部分:数据结构

    第三部分:数据结构 原文:Part III: Data Structures 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你正在以你的方式构建个人流程,它让你以有限的阻碍快速 ...

最新文章

  1. C# 学习笔记(6) 多态
  2. SAP ERP项目各模块设计重点
  3. boost::mpl模块实现deque相关的测试程序
  4. STL 里 resize 和 reserve 的区别
  5. java 汉字排序_java实现中文汉字的首字母排序
  6. 如何隐藏你的 Linux 的命令行历史
  7. java jdbc分页_使用JDBC进行分页查询
  8. 装箱(Boxing)和拆箱(Unboxing)
  9. 【转】C#安装包(自动卸载低版本)
  10. html盒子标准模型,CSS——(二)盒子模型与标准流
  11. 关于重定向页面和请求转发页面的区别
  12. Webtrends的跨域访客跟踪机制
  13. Python基础课程笔记·嵩天
  14. 程序员修炼之道---从小工到专家 第一章
  15. 8086汇编语言:8086CPU的各个引脚的功能讲解
  16. matlab 开启并行,Matlab并行(持续更新)
  17. 计算机学院主管学生日常工作的是,学生会的年度计划书(网络版)doc(完整版)...
  18. 秋风荷桂香 晚风拂夕阳
  19. django之 报错(1146, “Table ‘demo2.web‘ doesn‘t exist“)
  20. Python「可视化编程插件」让编程更easy

热门文章

  1. win7不显示移动硬盘_win7系统电脑开机不显示桌面?
  2. php 检测nfs状态,PHP和Shell实现检查SAMBA与NFS Server是否存在_php技巧
  3. RT-Thread下的串口驱动程序分析
  4. 【STM32】STM32CubeMX教程二--基本使用(新建工程点亮LED灯)
  5. java deque_使用Deque
  6. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
  7. RabbitMQ的简单示例
  8. 东南大学RM装甲板识别算法详解
  9. bzoj3527: [Zjoi2014]力 fft
  10. Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。...