11from flask import Blueprint , render_template , request , flash
22import duckdb
33
4- views = Blueprint (' views' , __name__ )
4+ views = Blueprint (" views" , __name__ )
55# Read data using DuckDB
66db = duckdb .connect ()
7- db .execute ("CREATE TEMPORARY TABLE attributes AS SELECT * FROM read_csv_auto('user_attributes.csv')" )
8- db .execute ("CREATE TEMPORARY TABLE events AS SELECT * FROM read_csv_auto('user_events.csv')" )
7+ db .execute (
8+ "CREATE TEMPORARY TABLE attributes AS SELECT * FROM read_csv_auto('user_attributes.csv')"
9+ )
10+ db .execute (
11+ "CREATE TEMPORARY TABLE events AS SELECT * FROM read_csv_auto('user_events.csv')"
12+ )
913
10- @views .route ('/' )
14+
15+ @views .route ("/" )
1116def home ():
1217 return render_template ("home.html" )
1318
14- @views .route ('/query_output' , methods = ['GET' , 'POST' ])
19+
20+ @views .route ("/query_output" , methods = ["GET" , "POST" ])
1521def index ():
16- #Create a SQL query as a string to execute in DuckDB
17- if request .method == ' POST' :
22+ # Create a SQL query as a string to execute in DuckDB
23+ if request .method == " POST" :
1824 print (request .form )
1925 attr = request .form
20- age_from = attr .get (' age_from' )
21- age_to = attr .get (' age_to' )
22- gender_male = attr .get (' male' )
23- gender_female = attr .get (' female' )
24- input_location = attr .get (' input_location' )
25- input_date = attr .get (' input_date' )
26- input_sub_plan = attr .get (' input_sub_plan' )
27- input_device = attr .get (' input_device' )
26+ age_from = attr .get (" age_from" )
27+ age_to = attr .get (" age_to" )
28+ gender_male = attr .get (" male" )
29+ gender_female = attr .get (" female" )
30+ input_location = attr .get (" input_location" )
31+ input_date = attr .get (" input_date" )
32+ input_sub_plan = attr .get (" input_sub_plan" )
33+ input_device = attr .get (" input_device" )
2834
29- column_name = ['User ID' , 'User Name' , 'Age' , 'Gender' , 'Country' , 'Sign-UP Date' , 'Subscription Plan' , 'Device' , 'Login' , 'Added To Cart' , 'Purchased Item' , 'Time of Event' ]
35+ column_name = [
36+ "User ID" ,
37+ "User Name" ,
38+ "Age" ,
39+ "Gender" ,
40+ "Country" ,
41+ "Sign-UP Date" ,
42+ "Subscription Plan" ,
43+ "Device" ,
44+ "Login" ,
45+ "Added To Cart" ,
46+ "Purchased Item" ,
47+ "Time of Event" ,
48+ ]
3049 selected_queries = []
31- query_select = ["SELECT a.*,e.* EXCLUDE user_ID FROM attributes a INNER JOIN events e ON a.user_ID = e.user_ID WHERE" ]
50+ query_select = [
51+ "SELECT a.*,e.* EXCLUDE user_ID FROM attributes a INNER JOIN events e ON a.user_ID = e.user_ID WHERE"
52+ ]
3253 parameters = []
3354 query_orderer = []
3455 # Check for the attributes which are selected and add them to the SQL query
35- if attr .get (' age' ) == 'on' :
56+ if attr .get (" age" ) == "on" :
3657 selected_queries .append (age_from )
3758 selected_queries .append (age_to )
38- if age_from is not '' and age_to is not '' :
59+ if age_from is not "" and age_to is not "" :
3960 query_for_age = "(a.age BETWEEN ? AND ?) AND"
4061 query_select .append (query_for_age )
4162 parameters .append (age_from )
4263 parameters .append (age_to )
4364 else :
4465 query_for_age = "(a.age BETWEEN 18 AND 60) AND"
4566 query_select .append (query_for_age )
46-
47- if attr .get (' gender' ) == 'on' :
48- if gender_female == ' female' and gender_male == ' male' :
67+
68+ if attr .get (" gender" ) == "on" :
69+ if gender_female == " female" and gender_male == " male" :
4970 selected_queries .append (gender_female )
5071 query_for_gender_all = "a.gender == 'Female' OR a.gender == 'Male' AND"
5172 query_select .append (query_for_gender_all )
52- elif gender_female == ' female' :
73+ elif gender_female == " female" :
5374 selected_queries .append (gender_female )
5475 query_for_female = "a.gender == 'Female' AND"
5576 query_select .append (query_for_female )
56- elif gender_male == ' male' :
77+ elif gender_male == " male" :
5778 selected_queries .append (gender_male )
5879 query_for_male = "a.gender == 'Male' AND"
5980 query_select .append (query_for_male )
60-
61- if attr .get (' location' ) == 'on' :
81+
82+ if attr .get (" location" ) == "on" :
6283 selected_queries .append (input_location )
6384 query_for_location = "UPPER(a.location) == UPPER(?) AND"
6485 query_select .append (query_for_location )
6586 parameters .append (input_location )
66-
67- if attr .get (' signup_date' ) == 'on' :
87+
88+ if attr .get (" signup_date" ) == "on" :
6889 selected_queries .append (input_date )
6990 query_for_date = "(a.signup_date == ?) AND"
7091 parameters .append (input_date )
7192 query_select .append (query_for_date )
7293
73- if attr .get (' sub_plan' ) == 'on' :
94+ if attr .get (" sub_plan" ) == "on" :
7495 selected_queries .append (input_sub_plan )
7596 query_for_plan = "(UPPER(a.sub_plan) == UPPER(?)) AND"
7697 parameters .append (input_sub_plan )
7798 query_select .append (query_for_plan )
7899
79- if attr .get (' device' ) == 'on' :
100+ if attr .get (" device" ) == "on" :
80101 selected_queries .append (input_device )
81102 query_for_device = "(UPPER(a.device_type) == UPPER(?))"
82103 parameters .append (input_device )
83104 query_select .append (query_for_device )
84105
85106 query_selection = " " .join (query_select ).rstrip ("AND" )
86107
87- if attr .get (' event_1' ) == 'on' :
108+ if attr .get (" event_1" ) == "on" :
88109 selected_queries .append (login )
89110 query_for_login = " ORDER BY e.login,a.user_ID;"
90111 query_orderer .append (query_for_login )
91- elif attr .get (' event_2' ) == 'on' :
112+ elif attr .get (" event_2" ) == "on" :
92113 selected_queries .append (added_to_cart )
93114 query_for_cart = " ORDER BY e.added_to_cart,a.user_ID;"
94115 query_orderer .append (query_for_cart )
95- elif attr .get (' event_3' ) == 'on' :
116+ elif attr .get (" event_3" ) == "on" :
96117 selected_queries .append (purchased_item )
97118 query_for_purchased_item = " ORDER BY e.purchased_item,a.user_ID;"
98119 query_orderer .append (query_for_purchased_item )
99- elif attr .get (' time_stamp' ) == 'on' :
120+ elif attr .get (" time_stamp" ) == "on" :
100121 selected_queries .append (time_stamp )
101122 query_for_time = " ORDER BY e.time_stamp,a.user_ID;"
102123 query_orderer .append (query_for_time )
@@ -105,7 +126,9 @@ def index():
105126 query_orderer .append (query_order )
106127
107128 query_selection = query_selection + " " .join (query_orderer )
108- print (query_selection , parameters ) # Logs out the SQL query before running (For Debugging purposes)
129+ print (
130+ query_selection , parameters
131+ ) # Logs out the SQL query before running (For Debugging purposes)
109132
110133 data = db .execute (query_selection , parameters ).fetchall ()
111- return render_template ("table.html" , data = data , header = column_name )
134+ return render_template ("table.html" , data = data , header = column_name )
0 commit comments