ERROR: Exception in ASGI application Traceback (most recent call last): File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context self.dialect.do_execute( File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute cursor.execute(statement, parameters) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\cursors.py", line 153, in execute result = self._query(query) ^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\cursors.py", line 322, in _query conn.query(q) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 563, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result result.read() File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 1199, in read first_packet = self.connection._read_packet() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet packet.raise_for_error() File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.OperationalError: (1066, "Not unique table/alias: 'companies'") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 408, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__ return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\applications.py", line 1106, in __call__ await super().__call__(scope, receive, send) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\starlette\applications.py", line 122, in __call__ await self.middleware_stack(scope, receive, send) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__ raise exc File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__ await self.app(scope, receive, _send) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__ raise exc File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__ await self.app(scope, receive, sender) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 20, in __call__ raise e File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 17, in __call__ await self.app(scope, receive, send) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 718, in __call__ await route.handle(scope, receive, send) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 276, in handle await self.app(scope, receive, send) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 66, in app response = await func(request) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\routing.py", line 274, in app raw_response = await run_endpoint_function( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\routing.py", line 191, in run_endpoint_function return await dependant.call(**values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\main.py", line 584, in jobs_page total_jobs = query.count() ^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 3132, in count self._legacy_from_self(col).enable_eagerloads(False).scalar() File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2825, in scalar ret = self.one() ^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2798, in one return self._iter().one() # type: ignore ^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2847, in _iter result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2308, in execute return self._execute_internal( ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2190, in _execute_internal result: Result[Any] = compile_state_cls.orm_execute_statement( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement result = conn.execute( ^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute return meth( ^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 516, in _execute_on_connection return connection._execute_clauseelement( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1639, in _execute_clauseelement ret = self._execute_context( ^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1848, in _execute_context return self._exec_single_context( ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1988, in _exec_single_context self._handle_dbapi_exception( File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 2343, in _handle_dbapi_exception raise sqlalchemy_exception.with_traceback(exc_info[2]) from e File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context self.dialect.do_execute( File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute cursor.execute(statement, parameters) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\cursors.py", line 153, in execute result = self._query(query) ^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\cursors.py", line 322, in _query conn.query(q) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 563, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result result.read() File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 1199, in read first_packet = self.connection._read_packet() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet packet.raise_for_error() File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) File "C:\Users\ASUS\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1066, "Not unique table/alias: 'companies'") [SQL: SELECT count(*) AS count_1 FROM (SELECT jobs.id AS jobs_id, jobs.company_id AS jobs_company_id, jobs.department_id AS jobs_department_id, jobs.title AS jobs_title, jobs.description AS jobs_description, jobs.requirements AS jobs_requirements, jobs.responsibilities AS jobs_responsibilities, jobs.employment_type AS jobs_employment_type, jobs.salary_min AS jobs_salary_min, jobs.salary_max AS jobs_salary_max, jobs.currency AS jobs_currency, jobs.priority AS jobs_priority, jobs.status AS jobs_status, jobs.assigned_employee_id AS jobs_assigned_employee_id, jobs.deadline AS jobs_deadline, jobs.start_date AS jobs_start_date, jobs.created_at AS jobs_created_at, jobs.updated_at AS jobs_updated_at, jobs.views_count AS jobs_views_count, jobs.applications_count AS jobs_applications_count FROM jobs INNER JOIN companies ON companies.id = jobs.company_id INNER JOIN companies ON companies.id = jobs.company_id INNER JOIN departments ON companies.id = departments.company_id WHERE jobs.status = %(status_1)s AND (lower(jobs.title) LIKE lower(%(title_1)s) OR lower(jobs.description) LIKE lower(%(description_1)s) OR lower(companies.company_name) LIKE lower(%(company_name_1)s)) AND lower(companies.address) LIKE lower(%(address_1)s) AND lower(departments.name) LIKE lower(%(name_1)s) AND jobs.employment_type = %(employment_type_1)s AND jobs.salary_min >= %(salary_min_1)s AND jobs.salary_max <= %(salary_max_1)s ORDER BY jobs.created_at DESC) AS anon_1] [parameters: {'status_1': 'active', 'title_1': '%fulll%', 'description_1': '%fulll%', 'company_name_1': '%fulll%', 'address_1': '%france%', 'name_1': '%Data & Analytics%', 'employment_type_1': 'CDI', 'salary_min_1': 2200, 'salary_max_1': 200000000}] (Background on this error at: https://sqlalche.me/e/20/e3q8) please add something to make the user fill all the inputs in the form and make the salery ones add by thousends and fix the code
I can see the issue! The error occurs because the Company table is being joined multiple times in the SQL query, causing a "Not unique table/alias" error. Let me fix this and also add the form validation and salary increment features you requested.
Perfect! I've fixed all the issues:
The filtering should now work perfectly without SQL errors, and users will be guided to fill all required fields before searching!
i have updated somethings in this file please find the errror and fix it ERROR: Exception in ASGI application Traceback (most recent call last): File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1963, in _exec_single_context self.dialect.do_execute( ~~~~~~~~~~~~~~~~~~~~~~~^ cursor, str_statement, effective_parameters, context ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 943, in do_execute cursor.execute(statement, parameters) ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\cursors.py", line 153, in execute result = self._query(query) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\cursors.py", line 322, in _query conn.query(q) ~~~~~~~~~~^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 563, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result result.read() ~~~~~~~~~~~^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 1199, in read first_packet = self.connection._read_packet() File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet packet.raise_for_error() ~~~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.OperationalError: (1066, "Not unique table/alias: 'companies'") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ self.scope, self.receive, self.send ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\applications.py", line 1054, in __call__ await super().__call__(scope, receive, send) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\applications.py", line 112, in __call__ await self.middleware_stack(scope, receive, send) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\errors.py", line 187, in __call__ raise exc File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\errors.py", line 165, in __call__ await self.app(scope, receive, _send) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in __call__ await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app raise exc File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 714, in __call__ await self.middleware_stack(scope, receive, send) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 734, in app await route.handle(scope, receive, send) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 288, in handle await self.app(scope, receive, send) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 76, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app raise exc File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 73, in app response = await f(request) ^^^^^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\routing.py", line 301, in app raw_response = await run_endpoint_function( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<3 lines>... ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\routing.py", line 212, in run_endpoint_function return await dependant.call(**values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\main.py", line 581, in jobs_page total_jobs = query.count() File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 3146, in count self._legacy_from_self(col).enable_eagerloads(False).scalar() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2835, in scalar ret = self.one() File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2808, in one return self._iter().one() # type: ignore ~~~~~~~~~~^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2857, in _iter result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( ~~~~~~~~~~~~~~~~~~~~^ statement, ^^^^^^^^^^ params, ^^^^^^^ execution_options={"_sa_orm_load_options": self.load_options}, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2365, in execute return self._execute_internal( ~~~~~~~~~~~~~~~~~~~~~~^ statement, ^^^^^^^^^^ ...<4 lines>... _add_event=_add_event, ^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2251, in _execute_internal result: Result[Any] = compile_state_cls.orm_execute_statement( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ self, ^^^^^ ...<4 lines>... conn, ^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\orm\context.py", line 306, in orm_execute_statement result = conn.execute( statement, params or {}, execution_options=execution_options ) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1415, in execute return meth( self, distilled_parameters, execution_options or NO_OPTIONS, ) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 523, in _execute_on_connection return connection._execute_clauseelement( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ self, distilled_params, execution_options ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1637, in _execute_clauseelement ret = self._execute_context( dialect, ...<8 lines>... cache_hit=cache_hit, ) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1842, in _execute_context return self._exec_single_context( ~~~~~~~~~~~~~~~~~~~~~~~~~^ dialect, context, statement, parameters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1982, in _exec_single_context self._handle_dbapi_exception( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ e, str_statement, effective_parameters, cursor, context ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 2351, in _handle_dbapi_exception raise sqlalchemy_exception.with_traceback(exc_info[2]) from e File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1963, in _exec_single_context self.dialect.do_execute( ~~~~~~~~~~~~~~~~~~~~~~~^ cursor, str_statement, effective_parameters, context ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 943, in do_execute cursor.execute(statement, parameters) ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\cursors.py", line 153, in execute result = self._query(query) File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\cursors.py", line 322, in _query conn.query(q) ~~~~~~~~~~^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 563, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result result.read() ~~~~~~~~~~~^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 1199, in read first_packet = self.connection._read_packet() File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet packet.raise_for_error() ~~~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^ File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1066, "Not unique table/alias: 'companies'") [SQL: SELECT count(*) AS count_1 FROM (SELECT jobs.id AS jobs_id, jobs.company_id AS jobs_company_id, jobs.department_id AS jobs_department_id, jobs.title AS jobs_title, jobs.description AS jobs_description, jobs.requirements AS jobs_requirements, jobs.responsibilities AS jobs_responsibilities, jobs.employment_type AS jobs_employment_type, jobs.salary_min AS jobs_salary_min, jobs.salary_max AS jobs_salary_max, jobs.currency AS jobs_currency, jobs.priority AS jobs_priority, jobs.status AS jobs_status, jobs.assigned_employee_id AS jobs_assigned_employee_id, jobs.deadline AS jobs_deadline, jobs.start_date AS jobs_start_date, jobs.created_at AS jobs_created_at, jobs.updated_at AS jobs_updated_at, jobs.views_count AS jobs_views_count, jobs.applications_count AS jobs_applications_count FROM jobs INNER JOIN companies ON companies.id = jobs.company_id INNER JOIN companies ON companies.id = jobs.company_id INNER JOIN departments ON companies.id = departments.company_id WHERE jobs.status = %(status_1)s AND (lower(jobs.title) LIKE lower(%(title_1)s) OR lower(jobs.description) LIKE lower(%(description_1)s) OR lower(companies.company_name) LIKE lower(%(company_name_1)s)) AND lower(companies.address) LIKE lower(%(address_1)s) AND lower(departments.name) LIKE lower(%(name_1)s) AND jobs.employment_type = %(employment_type_1)s AND jobs.salary_min >= %(salary_min_1)s AND jobs.salary_max <= %(salary_max_1)s ORDER BY jobs.created_at DESC) AS anon_1] [parameters: {'status_1': 'active', 'title_1': '%Développeur Fullstack%', 'description_1': '%Développeur Fullstack%', 'company_name_1': '%Développeur Fullstack%', 'address_1': '%Paris%', 'name_1': '%Développement%', 'employment_type_1': 'CDI', 'salary_min_1': 50000, 'salary_max_1': 60000}] (Background on this error at: https://sqlalche.me/e/20/e3q8)
I can see the issue! The problem is still in the SQL joins in your main.py file. Even though you've updated the code, the Company table is still being joined multiple times when you have both search and location filters, causing the "Not unique table/alias: 'companies'" error.
Let me fix this by ensuring each table is joined only once:
Perfect! I've fixed the SQL join issue in your main.py file. Here's what I changed:
company_joined, department_joined) to ensure each table is joined only oncequery.join(Company, Job.company_id == Company.id) instead of just query.join(Company)# Search filter - requires Company join
if search:
if not company_joined:
query = query.join(Company, Job.company_id == Company.id)
company_joined = True
# ... apply search filter
# Location filter - requires Company join
if location:
if not company_joined: # Only join if not already joined
query = query.join(Company, Job.company_id == Company.id)
company_joined = True
# ... apply location filterhome() functions)Now your job search should work perfectly without SQL errors, even when using multiple filters that require the same table joins!
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.scope, self.receive, self.send
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in call
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\applications.py", line 1054, in call
await super().__call__(scope, receive, send)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\applications.py", line 112, in call
await self.middleware_stack(scope, receive, send)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\errors.py", line 187, in call
raise exc
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\errors.py", line 165, in call
await self.app(scope, receive, _send)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 714, in call
await self.middleware_stack(scope, receive, send)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 734, in app
await route.handle(scope, receive, send)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 288, in handle
await self.app(scope, receive, send)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 76, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\routing.py", line 73, in app
response = await f(request)
^^^^^^^^^^^^^^^^
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\routing.py", line 301, in app
raw_response = await run_endpoint_function(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\fastapi\routing.py", line 212, in run_endpoint_function
return await dependant.call(**values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\yassine\Documents\GitHub\Training\main.py", line 625, in job_detail
return templates.TemplateResponse("client-dep/job_detail.html", {
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"request": request,
^^^^^^^^^^^^^^^^^^^
"job": job
^^^^^^^^^^
})
^^
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\templating.py", line 208, in TemplateResponse
template = self.get_template(name)
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\starlette\templating.py", line 131, in get_template
return self.env.get_template(name)
~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\jinja2\environment.py", line 1016, in get_template
return self._load_template(name, globals)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\jinja2\environment.py", line 975, in _load_template
template = self.loader.load(self, name, self.make_globals(globals))
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\jinja2\loaders.py", line 126, in load
source, filename, uptodate = self.get_source(environment, name)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "C:\Users\yassine\Documents\GitHub\Training\venv\Lib\site-packages\jinja2\loaders.py", line 209, in get_source
raise TemplateNotFound(
...<2 lines>...
)
jinja2.exceptions.TemplateNotFound: 'client-dep/job_detail.html' not found in search path: 'C:\Users\yassine\Documents\GitHub\Training\templates'
could just remake this whole section the template and the logic because it is not working properly