Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
lmpythw-zh
提交
f252767b
L
lmpythw-zh
项目概览
OpenDocCN
/
lmpythw-zh
8 个月 前同步成功
通知
0
Star
18
Fork
5
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
lmpythw-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f252767b
编写于
8月 15, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ex45
上级
001766b2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
14 deletion
+14
-14
ex44.md
ex44.md
+7
-7
ex45.md
ex45.md
+7
-7
未找到文件。
ex44.md
浏览文件 @
f252767b
...
@@ -8,28 +8,28 @@
...
@@ -8,28 +8,28 @@
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
Python 具有标准化的数据库 API,可以使用相同的代码访问多个数据库。
您要连接的每个数据库都有一个不同的模块,它们知道如何与该数据库通信,并遵循
<https://www.python.org/dev/peps/pep-0249/PEP>
中的标准。这使得我们更容易使用所有数据库来访问它们,它们具有不同 API。对于本练习,您
将使用
<https://docs.python.org/2/library/sqlite3.html>
上的
`sqlite3`
模块来处理 SQL。
Python 具有标准化的数据库 API,可以使用相同的代码访问多个数据库。
你要连接的每个数据库都有一个不同的模块,它们知道如何与该数据库通信,并遵循
<https://www.python.org/dev/peps/pep-0249/PEP>
中的标准。这使得我们更容易使用所有数据库来访问它们,它们具有不同 API。对于本练习,你
将使用
<https://docs.python.org/2/library/sqlite3.html>
上的
`sqlite3`
模块来处理 SQL。
## 学习 API
## 学习 API
作为程序员,
您必须不断做到的一件事是,学习其他人写的 API。我没有具体涵盖最有效的方式来做到它,因为大多数程序员得心应手,就像学习语言那样。Python 语言及其模块密切相关,当您学习 Python 时,您
不得不学习这些模块中的 API。然而,有一种有效的方式来学习我使用的 API,在这个练习中你将要学习它。
作为程序员,
你必须不断做到的一件事是,学习其他人写的 API。我没有具体涵盖最有效的方式来做到它,因为大多数程序员得心应手,就像学习语言那样。Python 语言及其模块密切相关,当你学习 Python 时,你
不得不学习这些模块中的 API。然而,有一种有效的方式来学习我使用的 API,在这个练习中你将要学习它。
为了学习像
`sqlite3`
模块的API,我会这样做:
为了学习像
`sqlite3`
模块的API,我会这样做:
+
查找 API 的所有文档,如果没有文档,请查找代码。
+
查找 API 的所有文档,如果没有文档,请查找代码。
+
检查样例或测试代码,并将其复制到我自己的文件中。通常阅读是不够的。我实际上会使其工作,猜猜为什么,因为很多时候文档不匹配当前版本的 API。制作文档中的所有东西,可以帮助我找到所有忘记提到的内容。
+
检查样例或测试代码,并将其复制到我自己的文件中。通常阅读是不够的。我实际上会使其工作,猜猜为什么,因为很多时候文档不匹配当前版本的 API。制作文档中的所有东西,可以帮助我找到所有忘记提到的内容。
+
当你获取样例代码,来工作于我的机器时,记录下任何对我有用(WFM)的情况。WFM 是,编写文档的人留下了重要的配置步骤,因为他们的计算机已经配置好了。大多数编写文档的程序员并不是从一台新机器开始,所以他们遗漏了一些库和软件,它们安装了但是别人没有。当
您
尝试在生产环境中配置 API 时,这些 WFM 的差异之后会阻碍你,所以我会记下来便于以后使用。
+
当你获取样例代码,来工作于我的机器时,记录下任何对我有用(WFM)的情况。WFM 是,编写文档的人留下了重要的配置步骤,因为他们的计算机已经配置好了。大多数编写文档的程序员并不是从一台新机器开始,所以他们遗漏了一些库和软件,它们安装了但是别人没有。当
你
尝试在生产环境中配置 API 时,这些 WFM 的差异之后会阻碍你,所以我会记下来便于以后使用。
+
为所有主要 API 入口点,以及它们所做的东西制作闪存卡或笔记。
+
为所有主要 API 入口点,以及它们所做的东西制作闪存卡或笔记。
+
尝试写一个小型的峰值测试,使用 API 但只使用你的笔记。如果
您点击了您不记得的 API 的一部分,请返回到文档并更新您
的笔记。
+
尝试写一个小型的峰值测试,使用 API 但只使用你的笔记。如果
你点击了你不记得的 API 的一部分,请返回到文档并更新你
的笔记。
+
最后,如果 API 很难使用,我会考虑使用一个简单的 API 来“包装”它,它只做我需要的东西,所以我可以忘记它。
+
最后,如果 API 很难使用,我会考虑使用一个简单的 API 来“包装”它,它只做我需要的东西,所以我可以忘记它。
如果这样不能学到 API,那么你应该考虑找一个不同的 API 来使用。如果 API 的作者告诉
您
“阅读代码”,则可能有另一个具有文档的项目。去使用该项目吧。如果你必须使用这个 API,那么考虑根据自己的代码来记录你的笔记,然后写一本书来卖,从作者的懒惰中赚钱。
如果这样不能学到 API,那么你应该考虑找一个不同的 API 来使用。如果 API 的作者告诉
你
“阅读代码”,则可能有另一个具有文档的项目。去使用该项目吧。如果你必须使用这个 API,那么考虑根据自己的代码来记录你的笔记,然后写一本书来卖,从作者的懒惰中赚钱。
## 挑战练习
## 挑战练习
您将以这种方式学习
`sqlite3`
API,然后尝试编写自己的数据库简化 API。请记住,
[
DB API 2.0
](
https://docs.python.org/2/library/sqlite3.html
)
已经是一个不错简单的 AP,用于访问数据库I,所以你只需练习包装一个糟糕的 API。您
的目标应该是充分学习
`sqlite3`
API,然后设计一种更简单的方法来访问它。
你将以这种方式学习
`sqlite3`
API,然后尝试编写自己的数据库简化 API。请记住,
[
DB API 2.0
](
https://docs.python.org/2/library/sqlite3.html
)
已经是一个不错简单的 AP,用于访问数据库I,所以你只需练习包装一个糟糕的 API。你
的目标应该是充分学习
`sqlite3`
API,然后设计一种更简单的方法来访问它。
有时“简单”纯粹是主观的,或是根据当前的需要。你可以决定,你需要简化的东西,不是与 SQL 数据库通信的方式,而是你与 SQL 数据库通信的方式。如果
您的应用程序只需要处理人员和宠物,那么您的简化可以仅仅是,制作一个仅适用于您
的 API。
有时“简单”纯粹是主观的,或是根据当前的需要。你可以决定,你需要简化的东西,不是与 SQL 数据库通信的方式,而是你与 SQL 数据库通信的方式。如果
你的应用程序只需要处理人员和宠物,那么你的简化可以仅仅是,制作一个仅适用于你
的 API。
## 深入学习
## 深入学习
...
...
ex45.md
浏览文件 @
f252767b
...
@@ -8,22 +8,22 @@
...
@@ -8,22 +8,22 @@
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
这本书的 SQL 部分的最后一个练习是一个很大的跳跃。
您使用一个数据库知道了 SQL 语言的基础知识。你也应该精通 Python 的 OOP。现在是时候组合这两个,并创建一个对象关系管理器(ORM)。ORM 的工作是,使用简单的 Python 类,并将它们转换为数据库表中存储的行。如果您曾经使用过 Django,那么您已经使用他们的 ORM 来存储数据。在本练习中,您
将尝试逆向分析如何实现它。
这本书的 SQL 部分的最后一个练习是一个很大的跳跃。
你使用一个数据库知道了 SQL 语言的基础知识。你也应该精通 Python 的 OOP。现在是时候组合这两个,并创建一个对象关系管理器(ORM)。ORM 的工作是,使用简单的 Python 类,并将它们转换为数据库表中存储的行。如果你曾经使用过 Django,那么你已经使用他们的 ORM 来存储数据。在本练习中,你
将尝试逆向分析如何实现它。
## 挑战练习
## 挑战练习
在现实世界中,如果
我要求一个为我工作的程序员创建自己的 ORM,我会说:“没门,使用现有的。工作环境不同于教育环境,因为有人付钱让你完成一些事情。使用你的工作时间,来创造一个不能使你的雇主受益的事情,这是不正当的。但是,您自己的个人时间全部是你的,作为初学者,您
应该尝试重新创建尽可能多的经典软件。
在现实世界中,如果
一个为我工作的程序员打算创建自己的 ORM,我会说:“没门,使用现有的。”工作环境不同于教育环境,因为有人付钱让你完成一些事情。使用你的工作时间,来创造一个不能使你的雇主受益的事情,这是不正当的。但是,你自己的个人时间全部是你的,作为初学者,你
应该尝试重新创建尽可能多的经典软件。
创建一个 ORM 将会让你了解许多问题,关于面向对象概念和 SQL 之间的不一致。有许多 SQL 可以建模的东西,而类经常卡在这里。还有一个问题,SQL 中的一切都是表。尝试创建自己的 ORM 将会让你深入了解 SQL 和 OOP,我建议花费大量的时间,尽你所能制作一个最好的 ORM。
创建一个 ORM 将会让你了解许多问题,关于面向对象概念和 SQL 之间的不一致。有许多 SQL 可以建模的东西,而类经常卡在这里。还有一个问题,SQL 中的一切都是表。尝试创建自己的 ORM 将会让你深入了解 SQL 和 OOP,我建议花费大量的时间,尽你所能制作一个最好的 ORM。
您
在 ORM 中应实现的一些主要功能有:
你
在 ORM 中应实现的一些主要功能有:
+
从外部传递字符串到 ORM 应该是安全的。如果你使用 F 字符串来制作你的 SQL,那么你就错了。原因是,如果
您执行
`f"SELECT * FROM {table_name}`
,那么有人可以从外部将
`table_name`
设置为SQL,例如
`person; DROP TABLE person`
。您的数据库很可能以这种方式运行,销毁所有内容或更糟。有些数据库甚至允许您在 SQL 中运行系统命令,这被称为“SQL 注入”,您
不应该在 ORM 中引入它。
+
从外部传递字符串到 ORM 应该是安全的。如果你使用 F 字符串来制作你的 SQL,那么你就错了。原因是,如果
你执行
`f"SELECT * FROM {table_name}`
,那么有人可以从外部将
`table_name`
设置为SQL,例如
`person; DROP TABLE person`
。你的数据库很可能以这种方式运行,销毁所有内容或更糟。有些数据库甚至允许你在 SQL 中运行系统命令,这被称为“SQL 注入”,你
不应该在 ORM 中引入它。
+
所有的 CRUD 操作,但在Python。我建议你跳过
`CREATE TABLE`
部分,直到你让其他的一切正常工作。简单的
`INSERT`
,
`SELECT`
,
`UPDATE`
和
`DELETE`
是易于制作的,但是从类定义创建数据库纲要涉及到一些主流的 Python 黑魔法,使其真正有效。使用手工制作的
`.sql`
文件创建
您的数据库,然后一旦让其他东西正常工作,您
可以尝试纲要系统来替换
`.sql`
文件。
+
所有的 CRUD 操作,但在Python。我建议你跳过
`CREATE TABLE`
部分,直到你让其他的一切正常工作。简单的
`INSERT`
,
`SELECT`
,
`UPDATE`
和
`DELETE`
是易于制作的,但是从类定义创建数据库纲要涉及到一些主流的 Python 黑魔法,使其真正有效。使用手工制作的
`.sql`
文件创建
你的数据库,然后一旦让其他东西正常工作,你
可以尝试纲要系统来替换
`.sql`
文件。
+
将 Python 类型匹配到 SQL 类型以及新类型,来处理 SQL 类型。
您可能会发现,您
必须做一些杂技,将 Python 数据类型放到 SQL 表中。也许这太痛苦了,所以你最终会自己制作数据类型。这就是 Django 做的事情。
+
将 Python 类型匹配到 SQL 类型以及新类型,来处理 SQL 类型。
你可能会发现,你
必须做一些杂技,将 Python 数据类型放到 SQL 表中。也许这太痛苦了,所以你最终会自己制作数据类型。这就是 Django 做的事情。
+
事务是一个高级话题,但如果你可以实现它就试一试。
+
事务是一个高级话题,但如果你可以实现它就试一试。
我也会说,在这个练习中,你可以从任意数量的项目借鉴功能。在设计时,请随意查看 Django 的 ORM。最后,我强烈建议
您
首先仅仅实现一个 ORM,它可以处理你在本书的这个部分创建的小型数据库。一旦你得到一个可以处理这个数据库的东西,就可以将其推广到任何数据库。
我也会说,在这个练习中,你可以从任意数量的项目借鉴功能。在设计时,请随意查看 Django 的 ORM。最后,我强烈建议
你
首先仅仅实现一个 ORM,它可以处理你在本书的这个部分创建的小型数据库。一旦你得到一个可以处理这个数据库的东西,就可以将其推广到任何数据库。
## 深入学习
## 深入学习
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录