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

简介: 练习 39:SQL 创建 原文:Exercise 39: Creating with SQL 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译当我们谈论首字母缩写“CRUD”时,“C”代表“创建”,它不仅仅意味着创建表。

练习 39:SQL 创建

原文:Exercise 39: Creating with SQL

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

当我们谈论首字母缩写“CRUD”时,“C”代表“创建”,它不仅仅意味着创建表。这也意味着将数据插入到表中,并使用表和插入来链接表。由于我们需要一些表和一些数据来完成其余的 CRUD(增删改查),我们开始学习如何在 SQL 中执行最基本的创建操作。

表的创建

我在简介中说,可以对表内的数据执行“增删改查”操作。你如何把表放在首要位置?通过对数据库纲要(Schema)执行 CRUD ,第一个要学习的 SQL 语句是CREATE

CREATE TABLE person (
    id INTEGER PRIMARY KEY,
    first_name TEXT,
    last_name TEXT,
    age INTEGER
);

你可以将其放在一行中,但是我打算讨论每一行,所以写成了多行。这里是每行所做的事情:

ex1.sql:1

CREATE TABLE的起始,它提供了表的名称person。这个部分之后,之后将你想要的字段放到括号里。

ex1.sql:2

id列,它用于准确确定每一行。列的格式是NAME TYPE,并且这里我假设,我需要一个INTEGER也是PRIMARY KEY。这样做告诉 SQLite3 来将其特殊对待。

ex1.sql:3~4

first_namelast_name列。它们都是TEXT

ex1.sql:5

age列,只是一个INTEGER

ex1.sql:6

使用圆括号结束列的列表,之后是一个分号(;)。

创建多表的数据库

创建一个表不是特别实用。我希望你现在创建三个表,你可以在里面储存数据。

CREATE TABLE person (
    id INTEGER PRIMARY KEY,
    first_name TEXT,
    last_name TEXT,
    age INTEGER
);

CREATE TABLE pet (
    id INTEGER PRIMARY KEY,
    name TEXT,
    breed TEXT,
    age INTEGER,
    dead INTEGER
);

CREATE TABLE person_pet (
    person_id INTEGER,
    pet_id INTEGER
);

在此文件中,你正在为两种数据类型制作表,然后将它们与第三个表“链接”在一起。人们称这些“链接”表为“关系”,但没有生命的非常愚蠢的人把所有表都成为“关系”,并且热衷于使那些想要完成工作的人困惑。在我的书中,具有数据的表是“表”,将表连接在一起的表称为“关系”。

这里没有任何新东西,除非你看到person_pet,你会看到我已经写了两列:person_idpet_id。将两个表链接在一起,只是向person_pet插入一行。它拥有两行的 ID 列的值,你想要链接它们。例如,如果person包含一行id=20,pet有一行id=98,然后假设这个人拥有这个宠物,你会将person_id=20, pet_id=98插入到person_pet关系(表)中。

在接下来的几个练习中,我们将实际插入这样的数据。

插入数据

你有了要处理的几个表,所以现在我让你使用INSERT命令,放进去一些数据:

INSERT INTO person (id, first_name, last_name, age)
    VALUES (0, "Zed", "Shaw", 37);

INSERT INTO pet (id, name, breed, age, dead)
    VALUES (0, "Fluffy", "Unicorn", 1000, 0);

INSERT INTO pet VALUES (1, "Gigantor", "Robot", 1, 1);

在这个文件中,我使用两种不同形式的INSERT命令。第一种形式是更明确的风格,最有可能是你应该使用的东西。它指定要插入的列,后跟VALUES,然后要包括的数据。这两个列表(列名和值)都在括号内,并以逗号分隔。

第七行的第二个版本是一个缩写版本,它不指定列,而是依赖于表中的隐式顺序。这种形式是危险的,因为你不知道你的语句实际访问哪一列,并且某些数据库对列没有可靠的排序。当你真的很懒惰时,最好只用这种形式。

插入引用数据

在最后一节,你会在表中放满人和宠物。唯一缺少的东西是,谁拥有什么宠物,这个数据存入person_pet表,如下所示:

INSERT INTO person_pet (person_id, pet_id) VALUES (0, 0);
INSERT INTO person_pet VALUES (0, 1);

我再次使用显式格式,然后使用隐式格式。我使用我想要的person表的行id(这里是0),和我想要的pet表的行id(同样,0是独角兽,1是死去的机器人)。然后,我们向person_pet关系表中插入一行,用于人与宠物之间的每个“连接”。

挑战练习

  • 创建另一个数据库,但为其它东西创建其他INTEGERTEXT字段,person可能拥有它们。
  • 在这些表中,我创建了第三个关系表来链接它们。你如何摆脱这个关系表person_pet,并将这些信息优雅放在person里面?这个变化暗示了什么?
  • 如果你可以把一行放入person_pet,你是否可以放多行?你如何记录一个疯狂的猫女士与 50 只猫?
  • 为人们可能拥有的汽车创建另一个表,并创建其对应的关系表。
  • 在你喜欢的搜索引擎中搜索“sqlite3 数据类型”,然后阅读 SQLite3 文档中的数据类型。记录你可以使用什么类型,以及其他看起来很重要的东西。我们稍后会介绍。
  • 插入你自己和你的宠物(或像我这样的虚拟宠物)。
  • 如果将上一个练习中的数据库更改为没有person_pet表,则使用该模式创建一个新数据库,并将相同的信息插入到该数据库中。
  • 回顾数据类型列表,并记录不同类型所需的格式。例如,请注意你有多少种方式来写入TEXT数据。
  • 为你和你的宠物添加关系。
  • 使用这张表,一只宠物可以被多于一个人拥有吗?这在逻辑上是可能的吗?家养的狗如何呢?严格来说,家庭中的每个人不是拥有它吗?
  • 考虑上面的东西,并且考虑到你有一个替代设计,将pet_id放在pearon表中,哪种设计更适合这种情况?

深入学习

请阅读 SQLite3 CREATE命令的文档,然后查看尽可能多的其他CREATE语句。你还应该阅读 https://sqlite.org/lang_insert.html 上的INSERT文档,这应该会引导你阅读许多其他页面。

相关文章
|
17天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
1月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
2月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
134 5
|
2月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
94 3
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
70 5
|
1月前
|
SQL 安全 数据库
Python防止SQL注入攻击的方法
Python防止SQL注入攻击的方法
65 0
|
1月前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接2a.bijius.com
Python与SQL的集成是现代数据科学和工程实践的核心。通过有效的数据查询、管理与自动化,可以显著提升数据分析和决策过程的效率与准确性。随着技术的不断发展,这种集成的应用场景将更加广泛,为数据驱动的创新提供更强大的支持。
|
1月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
1. Python与SQL集成的关键步骤 在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
2月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
121 1
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
48 1

热门文章

最新文章

下一篇
无影云桌面