From 826a0da894918e0855b684b220071ee90ba41182 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Tue, 15 Aug 2017 16:22:14 +0800 Subject: [PATCH] ex45 --- ex45.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ex45.md b/ex45.md index 54daa6a..f6cc72d 100644 --- a/ex45.md +++ b/ex45.md @@ -18,8 +18,8 @@ 你在 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`文件。 ++ 从外部传递字符串到 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`文件。 + 将 Python 类型匹配到 SQL 类型以及新类型,来处理 SQL 类型。你可能会发现,你必须做一些杂技,将 Python 数据类型放到 SQL 表中。也许这太痛苦了,所以你最终会自己制作数据类型。这就是 Django 做的事情。 + 事务是一个高级话题,但如果你可以实现它就试一试。 -- GitLab