笨办法学 Python · 续 练习 41:SQL 更新

简介: 练习 41:SQL 更新 原文:Exercise 41: Updating with SQL 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译现在,你了解了 CRUD 的 CR 部分,还剩下更新和删除操作。

练习 41:SQL 更新

原文:Exercise 41: Updating with SQL

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

现在,你了解了 CRUD 的 CR 部分,还剩下更新和删除操作。与所有其他 SQL 命令一样,UPDATE命令遵循类似于DELETE的格式,但它会更改行中的列,而不是删除它们。

UPDATE person SET first_name = "Hilarious Guy"
    WHERE first_name = "Zed";

UPDATE pet SET name = "Fancy Pants"
    WHERE id=0;

SELECT * FROM person;
SELECT * FROM pet;

在上面的代码中,我将我的名字改为"Hilarious Guy",因为这更准确。为了展示我的新绰号,我将我的独角兽更名为"Fancy Pants"。他喜欢它。

这不应该很难弄清楚,只是以防万一,我拆解第一个:

  • UPDATE开始,这是你将要更新的表,这里是person
  • 接下来使用SET来说明,哪些列应该被设置为什么值。只要你用逗号分隔,如first_name = "Zed", last_name = "Shaw",你可以按需更改尽可能多的列。
  • 然后指定一个WHERE子句,为每行提供一个SELECT风格的测试集。当UPDATE找到匹配时,它执行更新,并会将列SET为你规定的样子。

复杂表的更新

在上一个练习中,我让你使用UPDATE执行子查询,现在我要求你,将所有我拥有的宠物的名称更改为"Zed's Pet"

SELECT * FROM pet;

UPDATE pet SET name = "Zed's Pet" WHERE id IN (
    SELECT pet.id
    FROM pet, person_pet, person
    WHERE
    person.id = person_pet.person_id AND
    pet.id = person_pet.pet_id AND
    person.first_name = "Zed"
);

SELECT * FROM pet;

这是根据另一个表的信息更新一个表的方法。还有其他一些方法,可以做同样的事情,但是这样做是最容易理解。

更新数据

我将向你展示一种插入数据的替代方式,有助于原子地替换一行。你不一定经常需要它,但是如果必须替换整个记录,并且不希望在不使用事务的情况下执行更复杂的UPDATE,那么它将会有所帮助。

这里,我想用另一个人替换我的记录,但仅仅保留 ID。问题是我必须在事务中执行DELETE/INSERT才能使其成为原子,否则我需要执行一个完整的UPDATE

另一个更简单的方法是使用REPLACE命令,或者将其添加到INSERT作为修饰符。这里有一些 SQL,我首先无法插入新的记录,然后我使用这两种形式的REPLACE来实现它:

/* This should fail because 0 is already taken. */
INSERT INTO person (id, first_name, last_name, age)
    VALUES (0, 'Frank', 'Smith', 100);

/* We can force it by doing an INSERT OR REPLACE. */
INSERT OR REPLACE INTO person (id, first_name, last_name, age)
    VALUES (0, 'Frank', 'Smith', 100);

SELECT * FROM person;

/* And shorthand for that is just REPLACE. */
REPLACE INTO person (id, first_name, last_name, age)
    VALUES (0, 'Zed', 'Shaw', 37);

/* Now you can see I'm back. */
SELECT * FROM person;

挑战练习

  • 使用UPDATE,通过我的person.id,将我的名字改回"Zed"
  • 写一个UPDATE,将任何死亡动物重命名为"DECEASED"。如果你尝试说他们是"DEAD",它会失败,因为 SQL 会认为你的意思是,将其设置为名为"DEAD"的列,这不是你想要的。
  • 尝试使用一个子查询,比如在DELETE中。
  • 访问 SQL As Understood By SQLite 页面,并开始阅读CREATE TABLEDROP TABLEINSERTDELETESELECTUPDATE的文档。
  • 尝试在这些文档中找到一些有趣的事情,并记录你不明白的事情,以便你可以稍后研究它们。
相关文章
|
3天前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
18 6
|
3天前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
13 5
|
2月前
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
65 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
24天前
|
SQL 机器学习/深度学习 开发工具
【机器学习 Azure Machine Learning】Azure Machine Learning 访问SQL Server 无法写入问题 (使用微软Python AML Core SDK)
【机器学习 Azure Machine Learning】Azure Machine Learning 访问SQL Server 无法写入问题 (使用微软Python AML Core SDK)
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
【7月更文挑战第27天】在 Web 开发中,Python 面临着如 SQL 注入、XSS 和 CSRF 等安全威胁。
56 0
|
2月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
40 1
|
2月前
|
SQL 安全 前端开发
Web安全新纪元:Python如何筑起SQL注入、XSS、CSRF的铜墙铁壁?
【7月更文挑战第26天】在Web开发中,安全性至关重要。Python提供强大工具来抵御SQL注入、XSS和CSRF等威胁。使用ORM如Django和SQLAlchemy可防SQL注入; Django等框架自动转义输出防XSS; CSRF通过自动及手动验证令牌来阻止。开发者须持续学习最新安全实践以保护用户数据。迈向Web安全新纪元,Python助你一臂之力。
32 1
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
【7月更文挑战第27天】在 Python Web 开发中, 安全至关重要。
44 0
|
2月前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【7月更文挑战第27天】在 Web 开发中,安全漏洞如同暗礁,其中 SQL 注入、XSS 和 CSRF 尤为棘手。本文通过实战案例展示如何使用 Python 抵御这些威胁。
55 0