-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path4-cities_by_state.py
executable file
·73 lines (59 loc) · 1.96 KB
/
4-cities_by_state.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/python3
"""
Module: 4-cities_by_state.py
Author: TheWatcher01
Date: 21/03/2024
Description:
Script lists all cities from the database hbtn_0e_4_usa.
It takes 3 arguments: mysql username, mysql password and database name.
Uses SQLAlchemy to connect to MySQL server running on localhost at port 3306.
Results are sorted in ascending order by cities.id and displayed as they are.
The code is not executed when imported.
"""
# Import necessary modules
from Utils.check_MySQL import check_mysql
from Utils.engine_setup import setup_engine
from Utils.session_setup import setup_session
from model_state import Base, State
from model_city import City
import sys
def list_cities():
"""
Function to list all cities from the database.
"""
# Check if the correct number of arguments are provided
if len(sys.argv) != 4:
print("Usage: ./4-cities_by_state.py username password "
"database")
return
# Retrieve the arguments passed to the script
username = sys.argv[1]
password = sys.argv[2]
database = sys.argv[3]
try:
# Create an engine
engine = setup_engine(username, password, database)
# Check if engine was successfully created
if engine is None:
return
# Create a Session
session = setup_session(engine)
# Query the database for all cities and their states
cities = session.query(City, State).join(State).order_by(City.id)
# Check if any City objects were found
if cities.count() > 0:
for city, state in cities:
print("{}: ({}) {}".format(state.name, city.id, city.name))
else:
print("Not found")
except Exception as e:
# Print the full exception
print(e)
finally:
# Close the Session
if session:
session.close()
# Ensure the script is not executed when imported
if __name__ == "__main__":
check_mysql()
list_cities()