Update with new URL with params, see the first tutorial:
from flask import Flask, request, jsonify, render_template_string import sqlite3 from datetime import datetime app = Flask(__name__) # Clasa pentru serverul SQL class SQLiteServer: def __init__(self, db_name): self.db_name = db_name self.init_db() def init_db(self): conn = sqlite3.connect(self.db_name) c = conn.cursor() c.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, occupation TEXT, hobby TEXT, year_of_birth INTEGER, age INTEGER ) ''') conn.commit() conn.close() def calculate_age(self, year_of_birth): # Adjust year_of_birth if only two digits are provided if len(str(year_of_birth)) == 2: if year_of_birth > int(str(datetime.now().year)[-2:]): year_of_birth += 1900 else: year_of_birth += 2000 current_year = datetime.now().year return current_year - year_of_birth def add_user(self, first_name, last_name, occupation, hobby, year_of_birth): age = self.calculate_age(year_of_birth) conn = sqlite3.connect(self.db_name) c = conn.cursor() c.execute(''' INSERT INTO users (first_name, last_name, occupation, hobby, year_of_birth, age) VALUES (?, ?, ?, ?, ?, ?) ''', (first_name, last_name, occupation, hobby, year_of_birth, age)) conn.commit() conn.close() def get_users(self): conn = sqlite3.connect(self.db_name) c = conn.cursor() c.execute("SELECT * FROM users") users = c.fetchall() conn.close() return users def get_users_jsonify(): conn = sqlite3.connect('sqlite_database.db') c = conn.cursor() c.execute("SELECT * FROM users") users = c.fetchall() conn.close() return jsonify(users) # Clasa pentru serverul web class WebServer: def __init__(self, sqlite_server): self.sqlite_server = sqlite_server def run(self): app.run(debug=True) # adauga user si buton de redirect la pagina users @app.route('/') def index(): users = sqlite_server.get_users() return render_template_string(''' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Flask website for testing cypress with sqlite</title> </head> <body> <h2>Add User</h2> <form action="/add_user" method="post"> First Name: <input type="text" name="first_name"><br> Last Name: <input type="text" name="last_name"><br> Occupation: <input type="text" name="occupation"><br> Hobby: <input type="text" name="hobby"><br> Year of Birth: <input type="text" name="year_of_birth"><br> <input type="submit" value="Add User"> </form> <a href="http://127.0.0.1:5000/users"><button type="button">Show Users</button></a> </body> </html> ''', users=users) @app.route('/add_user', methods=['POST']) def add_user(): first_name = request.form['first_name'] last_name = request.form['last_name'] occupation = request.form['occupation'] hobby = request.form['hobby'] year_of_birth = int(request.form['year_of_birth']) sqlite_server.add_user(first_name, last_name, occupation, hobby, year_of_birth) return 'User added successfully! <a href="/">Go back</a>' @app.route('/users', methods=['GET']) def get_users(): query_type = request.args.get('query_type', 'simple') conn = sqlite3.connect('sqlite_database.db') c = conn.cursor() try: c.execute('SELECT name FROM sqlite_master WHERE type="table" AND name="users"') if not c.fetchone(): return jsonify({"error": "Table 'users' does not exist"}) if query_type == 'advanced': # Advanced query logic first_name = request.args.get('first_name') last_name = request.args.get('last_name') occupation = request.args.get('occupation') hobby = request.args.get('hobby') year_of_birth = request.args.get('year_of_birth') query = 'SELECT * FROM users WHERE 1=1' params = [] # Exemple query simple # Basic query: /users # Simple query: /users?query_type=simple for simple selection # Addvanced query: /users?query_type=advanced&first_name=John&occupation=Engineer for advanced querying # Advanced query with name search: /users?query_type=advanced&first_name=John&last_name=Doe # Query by occupation: /users?query_type=advanced&occupation=Engineer # Query by hobby: /users?query_type=advanced&hobby=Reading # Query by year of birth: /users?query_type=advanced&year_of_birth=1990 if first_name: query += ' AND first_name LIKE ?' params.append(f'%{first_name}%') if last_name: query += ' AND last_name LIKE ?' params.append(f'%{last_name}%') if occupation: query += ' AND occupation LIKE ?' params.append(f'%{occupation}%') if hobby: query += ' AND hobby LIKE ?' params.append(f'%{hobby}%') if year_of_birth: query += ' AND year_of_birth = ?' params.append(year_of_birth) # Query by minimum age: /users?query_type=advanced&min_age=30 # Query by maximum age: /users?query_type=advanced&max_age=50 # Query with ordering: /users?query_type=advanced&order_by=last_name # Query with limit: /users?query_type=advanced&limit=10 # Combined query: /users?query_type=advanced&first_name=John&occupation=Engineer&min_age=25&order_by=year_of_birth&limit=5 # Additional advanced query options for param, value in request.args.items(): match param: case 'min_age': query += ' AND (? - year_of_birth) >= ?' params.extend([datetime.now().year, int(value)]) case 'max_age': query += ' AND (? - year_of_birth) <= ?' params.extend([datetime.now().year, int(value)]) case 'order_by': query += f' ORDER BY {value}' case 'limit': query += ' LIMIT ?' params.append(int(value)) c.execute(query, params) else: # Simple query logic c.execute('SELECT * FROM users') users = c.fetchall() except sqlite3.OperationalError as e: return jsonify({"error": str(e)}) finally: conn.close() return jsonify(users) # Instanțierea serverului SQL și a serverului web sqlite_server = SQLiteServer('sqlite_database.db') web_server = WebServer(sqlite_server) if __name__ == '__main__': web_server.run()