Country Python I

[45 min]

Soit la base de données country définie par le code SQL ci-après.

1
CREATE TABLE country (
2
name VARCHAR,
3
gdp INTEGER,
4
PRIMARY KEY (name)
5
);
6
7
CREATE TABLE region (
8
country VARCHAR,
9
name VARCHAR,
10
population INTEGER,
11
area INTEGER,
12
PRIMARY KEY (country, name),
13
FOREIGN KEY (country) REFERENCES country(name)
14
);
15
16
CREATE TABLE log (
17
id INTEGER,
18
country VARCHAR NOT NULL,
19
region VARCHAR NOT NULL,
20
date DATE NOT NULL,
21
temperature DECIMAL(3,1) NOT NULL,
22
humidity DECIMAL(3,1) NOT NULL,
23
PRIMARY KEY (id),
24
UNIQUE (country, region, date),
25
FOREIGN KEY (country, region) REFERENCES region (country, name)
26
);
1
INSERT INTO country VALUES ('France', 38128);
2
INSERT INTO country VALUES ('Norway', 70392);
3
INSERT INTO country VALUES ('Spain', 26609);
4
5
INSERT INTO region VALUES ('France','Hauts-de-France', 5973098, 31813);
6
INSERT INTO region VALUES ('France','Île-de-France', 12005077, 12012);
7
INSERT INTO region VALUES ('France','Normandie', 3322757, 29906);
8
9
INSERT INTO log VALUES (1, 'France','Hauts-de-France', TO_DATE('23052017','DDMMYYYY'),21.1,51.4);
10
INSERT INTO log VALUES (2, 'France','Hauts-de-France', TO_DATE('24052017','DDMMYYYY'),23.1,62.4);
11
INSERT INTO log VALUES (3, 'France','Hauts-de-France', TO_DATE('25052017','DDMMYYYY'),17.5,71.1);

Question

Écrire un programme Python qui affiche la liste des régions de la base de données, en les triant par ordre inverse de densité de population (la densité est la population divisée par la surface).

Solution

1
#!/usr/bin/python3
2
3
import psycopg2
4
5
conn = psycopg2.connect("dbname='mydb' user='me' host='localhost' password='secret'")
6
7
sql = "SELECT name, population/area AS density FROM region ORDER BY density DESC";
8
9
resultat = conn.cursor()
10
resultat.execute(sql)
11
12
ligne = resultat.fetchone()
13
while ligne:
14
        name = ligne[0]
15
        density = ligne[1]
16
        print(name, density)
17
        ligne = resultat.fetchone()

Question

Proposez un programme Python qui affiche Yes s'il existe un pays qui commence par Fr, et No sinon.

Solution

1
#!/usr/bin/python3
2
3
import psycopg2
4
5
conn = psycopg2.connect("dbname='mydb' user='me' host='localhost' password='secret'")
6
7
sql = "SELECT name FROM country WHERE name LIKE 'Fr%'";
8
9
resultat = conn.cursor()
10
resultat.execute(sql)
11
12
ligne = resultat.fetchone()
13
if ligne:
14
  print ('Yes')
15
else:
16
  print ('No')  

Question

Proposez un programme Python qui affiche tous les pays qui commencent par Fr.

Solution

1
#!/usr/bin/python3
2
3
import psycopg2
4
5
conn = psycopg2.connect("dbname='mydb' user='me' host='localhost' password='secret'")
6
7
sql = "SELECT name FROM country WHERE name LIKE 'Fr%'";
8
9
resultat = conn.cursor()
10
resultat.execute(sql)
11
12
ligne = resultat.fetchone()
13
if ligne:
14
  while ligne:
15
    print(ligne[0])
16
    ligne = resultat.fetchone()
17
else:
18
  print ('No')