Skip to content

Commit 16f1b1b

Browse files
committed
add task 10
1 parent d5a2cce commit 16f1b1b

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#!/usr/bin/python3
2+
3+
"""
4+
Module contains script that prints the State
5+
object with the name passed as argument
6+
from the database hbtn_0e_6_usa
7+
"""
8+
9+
10+
def connect_db(host, port, username, passwd, db_name, **kwargs):
11+
"""
12+
Use SQLAlchemy to connect to
13+
MySQL server running on localhost at port 330
14+
15+
Args:
16+
host(str or int): Database host to use
17+
post(int): DB port
18+
user(str): DB user to use
19+
passwd(str): DB user's password
20+
db(str): database name to connect to
21+
22+
Return:
23+
session(Session object): session object bind to our database
24+
"""
25+
from sqlalchemy import create_engine
26+
from sqlalchemy.orm import sessionmaker
27+
28+
if kwargs["dialect"] and kwargs["driver"]:
29+
dialect = kwargs["dialect"]
30+
driver = kwargs["driver"]
31+
else:
32+
dialect = "mysql"
33+
driver = "mysqldb"
34+
35+
# create engine object
36+
arg = f"{dialect}+{driver}://{username}:{passwd}@{host}:{port}/{db_name}"
37+
engine = create_engine(
38+
arg,
39+
pool_pre_ping=True,
40+
)
41+
# create session object
42+
Session = sessionmaker(bind=engine)
43+
# bound sesion object to database
44+
session = Session()
45+
return session
46+
47+
48+
def print_data(data):
49+
"""
50+
Helper function used to print data
51+
"""
52+
try:
53+
print("{}".format(data[0].id))
54+
except (AttributeError, IndexError) as e:
55+
# AttributeError: 'Query' object has no attribute 'id' raised
56+
# when data[0] does'nt have key == id
57+
# IndexError: raised when data is empty
58+
print("Not found")
59+
60+
61+
def get_states(av):
62+
"""
63+
Get states with name passed as argument using sqlalchemy ORM
64+
65+
Args:
66+
av: list of arguments
67+
"""
68+
from model_state import Base, State
69+
70+
# get connection credentials
71+
host = "localhost"
72+
port = 3306
73+
user = av[0]
74+
passwd = av[1]
75+
db = av[2]
76+
search_params = av[3]
77+
kwargs = {"dialect": "mysql", "driver": "mysqldb"}
78+
79+
# connect to database
80+
session = connect_db(host, port, user, passwd, db_name=db, **kwargs)
81+
# fetch data
82+
queryset = session.query(State).filter(State.name == search_params)
83+
states = [state for state in queryset]
84+
return states
85+
86+
87+
if __name__ == "__main__":
88+
from sys import argv
89+
90+
av = argv[1:]
91+
data = get_states(av)
92+
print_data(data)

0x0F-python-object_relational_mapping/test.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ echo ""
3838
echo "========== Test task 9 ==========="
3939
sudo ./9-model_state_filter_a.py root root hbtn_0e_6_usa
4040

41+
echo ""
42+
echo "========== Test task 10 ==========="
43+
sudo ./10-model_state_my_get.py root root hbtn_0e_6_usa Illinois
44+
sudo ./10-model_state_my_get.py root root hbtn_0e_6_usa Texas
45+
4146

4247

4348

0 commit comments

Comments
 (0)