Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Web Programming with Python and JavaScript
SQL, Models, and Migrations
Data
origin destination duration
New York London 415
Shanghai Paris 760
Istanbul Tokyo 700
New York Paris 435
Moscow Paris 245
Lima New York 455
SQL
Database Management Systems
• MySQL
• PostgreSQL
• SQLite
• ...
SQLite Types
• TEXT
• NUMERIC
• INTEGER
• REAL
• BLOB
MySQL Types
• CHAR(size) • VARCHAR(size) • SMALLINT • INT • BIGINT • FLOAT • DOUBLE • ...
CREATE TABLE
CREATE TABLE flights ( id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT NOT NULL, destination TEXT NOT NULL, duration INTEGER NOT NULL );
CREATE TABLE flights ( id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT NOT NULL, destination TEXT NOT NULL, duration INTEGER NOT NULL );
CREATE TABLE flights ( id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT NOT NULL, destination TEXT NOT NULL, duration INTEGER NOT NULL );
CREATE TABLE flights ( id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT NOT NULL, destination TEXT NOT NULL, duration INTEGER NOT NULL );
CREATE TABLE flights ( id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT NOT NULL, destination TEXT NOT NULL, duration INTEGER NOT NULL );
CREATE TABLE flights ( id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT NOT NULL, destination TEXT NOT NULL, duration INTEGER NOT NULL );
CREATE TABLE flights ( id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT NOT NULL, destination TEXT NOT NULL, duration INTEGER NOT NULL );
Constraints
• CHECK • DEFAULT • NOT NULL • PRIMARY KEY • UNIQUE • ...
INSERT
INSERT INTO flights (origin, destination, duration) VALUES ("New York", "London", 415);
INSERT INTO flights (origin, destination, duration) VALUES ("New York", "London", 415);
INSERT INTO flights (origin, destination, duration) VALUES ("New York", "London", 415);
INSERT INTO flights (origin, destination, duration) VALUES ("New York", "London", 415);
INSERT INTO flights (origin, destination, duration) VALUES ("New York", "London", 415);
INSERT INTO flights (origin, destination, duration) VALUES ("New York", "London", 415);
SELECT
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights;
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights;
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT origin, destination FROM flights;
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT origin, destination FROM flights;
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE id = 3;
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE id = 3;
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE origin = "New York";
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE origin = "New York";
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE duration > 500;
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE duration > 500;
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE duration > 500 AND destination = "Paris";
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE duration > 500 AND destination = "Paris";
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE duration > 500 OR destination = "Paris";
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE duration > 500 OR destination = "Paris";
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE origin IN ("New York", "Lima");
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE origin IN ("New York", "Lima");
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE origin LIKE "%a%";
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE origin LIKE "%a%";
Functions
• AVERAGE • COUNT • MAX • MIN • SUM • ...
UPDATE
UPDATE flights SET duration = 430 WHERE origin = "New York" AND destination = "London";
UPDATE flights SET duration = 430 WHERE origin = "New York" AND destination = "London";
UPDATE flights SET duration = 430 WHERE origin = "New York" AND destination = "London";
UPDATE flights SET duration = 430 WHERE origin = "New York" AND destination = "London";
UPDATE flights SET duration = 430 WHERE origin = "New York" AND destination = "London";
UPDATE flights SET duration = 430 WHERE origin = "New York" AND destination = "London";
DELETE
DELETE FROM flights WHERE destination = "Tokyo";
DELETE FROM flights WHERE destination = "Tokyo";
DELETE FROM flights WHERE destination = "Tokyo";
DELETE FROM flights WHERE destination = "Tokyo";
DELETE FROM flights WHERE destination = "Tokyo";
Other Clauses
• LIMIT • ORDER BY • GROUP BY • HAVING • ...
Foreign Keys
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
flights
id origin origin_code destination destination_code duration
1 New York JFK London LHR 415
2 Shanghai PVG Paris CDG 760
3 Istanbul IST Tokyo NRT 700
4 New York JFK Paris CDG 435
5 Moscow SVO Paris CDG 245
6 Lima LIM New York JFK 455
flights
id code city
1 JFK New York
2 PVG Shanghai
3 IST Istanbul
4 LHR London
5 SVO Moscow
6 LIM Lima
7 CDG Paris
8 NRT Tokyo
airports
id origin destination duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
flights
id origin_id destination_id duration
1 1 4 415
2 2 7 760
3 3 8 700
4 1 7 435
5 5 7 245
6 6 1 455
flights
id first last flight_id
1 Harry Potter 1
2 Ron Weasley 1
3 Hermione Granger 2
4 Draco Malfoy 4
5 Luna Lovegood 6
6 Ginny Weasley 6
passengers
id first last
1 Harry Potter
2 Ron Weasley
3 Hermione Granger
4 Draco Malfoy
5 Luna Lovegood
6 Ginny Weasley
people
person_id flight_id
1 1
2 1
2 4
3 2
4 4
5 6
6 6
passengers
JOIN
first last origin
Harry Potter New York
Ron Weasley New York
Hermione Granger Shanghai
Draco Malfoy New York
Luna Lovegood Lima
Ginny Weasley Lima
SELECT first, origin, destination FROM flights JOIN passengers
ON passengers.flight_id = flights.id;
JOINs
• JOIN / INNER JOIN • LEFT OUTER JOIN • RIGHT OUTER JOIN • FULL OUTER JOIN
CREATE INDEX
CREATE INDEX name_index ON passengers (last);
SQL Injection
Username:
Password:
SELECT * FROM users WHERE username = username AND password = password;
Username:
harry
Password:
12345
SELECT * FROM users WHERE username = username AND password = password;
SELECT * FROM users WHERE username = "harry" AND password = "12345";
Username:
hacker" --
Password:
SELECT * FROM users WHERE username = username AND password = password;
SELECT * FROM users WHERE username = "hacker"--" AND password = "";
SELECT * FROM users WHERE username = "hacker"--" AND password = "";
Race Conditions
Models
SQL, Models, and Migrations
Web Programming with Python and JavaScript