Updates related to SQL and limit and offset

This commit is contained in:
Scott Idem
2023-06-29 16:10:37 -04:00
parent ed0e20fa6a
commit 8ed55b1ed9
2 changed files with 26 additions and 6 deletions

View File

@@ -520,8 +520,8 @@ def sql_insert_or_update(
# ### BEGIN ### Core Help CRUD ### sql_select() ###
# The catch all SQL SELECT function - STI 2021-02-17
# This one does it all for SQL SELECT queries
# Updated 2021-09-07
# This one does it all for SQL SELECT queries. It now works with limit and offset! - STI 2023-06-29
# Updated 2023-06-29
@logger_reset
def sql_select(
table_name: str|None = None,
@@ -529,6 +529,8 @@ def sql_select(
record_id_random: str|None = None,
field_name: str|None = None,
field_value = None,
limit: int = 9999999,
offset: int = 0,
sql: str|None = None,
data: dict|None = None,
rm_id_random: bool = False,
@@ -539,6 +541,12 @@ def sql_select(
) -> None|bool|dict|list:
log.setLevel(log_lvl)
if limit >= 0 and offset >= 0:
log.info(f'Creating partial SQL string for LIMIT and OFFSET. Limit: {limit}; Offset: {offset}')
sql_limit_offset = f'LIMIT {limit} OFFSET {offset}'
else:
sql_limit_offset = ''
if table_name and not (record_id or record_id_random or field_name or field_value or sql or data):
# Select all records from a table
log.info('Select all records from a table')
@@ -546,6 +554,7 @@ def sql_select(
f"""
SELECT *
FROM `{table_name}`
{sql_limit_offset}
;
"""
)
@@ -561,6 +570,7 @@ def sql_select(
SELECT *
FROM `{table_name}`
WHERE `{table_name}`.id = :record_id
{sql_limit_offset}
;
"""
)
@@ -572,12 +582,14 @@ def sql_select(
SELECT *
FROM `{table_name}`
WHERE `{table_name}`.id_random = :record_id_random
{sql_limit_offset}
;
"""
)
elif table_name and field_name and field_value and not (record_id or record_id_random or sql or data):
# Select all records from a table with a specific field and field value
log.info('Select all records from a table with a specific field and field value')
data = {}
data[field_name] = field_value
@@ -586,6 +598,7 @@ def sql_select(
SELECT *
FROM `{table_name}`
WHERE `{table_name}`.{field_name} = :{field_name}
{sql_limit_offset}
;
"""
)
@@ -611,6 +624,7 @@ def sql_select(
SELECT *
FROM `{table_name}`
WHERE {sql_where_string}
{sql_limit_offset}
;
"""
)

View File

@@ -35,6 +35,7 @@ from app.models.event_presenter_models import *
from app.models.event_registration_models import *
from app.models.event_session_models import *
from app.models.event_track_models import *
from app.models.grant_models import *
from app.models.hosted_file_models import *
from app.models.journal_models import *
from app.models.journal_entry_models import *
@@ -98,6 +99,7 @@ obj_type_li['event_presenter'] = {'table_name': 'v_event_presenter', 'tbl_name_u
obj_type_li['event_registration'] = {'table_name': 'v_event_registration', 'tbl_name_update': 'event_registration', 'base_name': Event_Registration_Base}
obj_type_li['event_session'] = {'table_name': 'v_event_session', 'tbl_name_update': 'event_session', 'base_name': Event_Session_Base, 'exclude_for_db': {'poc_person_id', 'file_count', 'internal_use_count', 'enable_from', 'enable_to', 'event_name', 'event_start_datetime', 'event_end_datetime', 'event_location_name', 'event_track_name', 'event_abstract_list', 'event_badge_list', 'event_device_list', 'event_file_list', 'event_file_internal_use_list', 'event_location', 'event_location_list', 'event_person_list', 'event_presenter_cat', 'event_presentation_list', 'event_presenter_list', 'event_track', 'poc_event_person'}}
obj_type_li['event_track'] = {'table_name': 'v_event_track', 'tbl_name_update': 'event_track', 'base_name': Event_Track_Base}
obj_type_li['grant'] = {'table_name': 'v_grant', 'tbl_name_update': 'grant', 'base_name': Grant_Base}
obj_type_li['hosted_file'] = {'table_name': 'v_hosted_file', 'tbl_name_update': 'hosted_file', 'base_name': Hosted_File_Base}
#obj_type_li['hosted_file_link'] = {'table_name': 'hosted_file_link', 'tbl_name_update': 'hosted_file_link', 'base_name': Hosted_File_Link_Base}
obj_type_li['journal'] = {'table_name': 'v_journal', 'tbl_name_update': 'journal', 'base_name': Journal_Base}
@@ -170,15 +172,19 @@ async def get_obj_li(
#obj_id: str=None,
for_obj_type: Optional[str] = Query(None, max_length=50),
for_obj_id: Optional[str] = Query(None, max_length=22),
limit: int = 10000,
offset: int = 0,
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
include: Optional[list] = [],
exclude: Optional[list] = [],
# include: Optional[list] = [],
# exclude: Optional[list] = [],
exclude_unset: Optional[bool] = False,
exclude_none: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
debug_data = {}
@@ -221,7 +227,7 @@ async def get_obj_li(
#data[f'{for_obj_type}_id'] = for_obj_id
field_name = f'{for_obj_type}_id'
sql_result = sql_select(table_name=table_name, field_name=field_name, field_value=for_obj_id)
sql_result = sql_select(table_name=table_name, field_name=field_name, field_value=for_obj_id, limit=limit, offset=offset)
else:
sql_result = sql_select(table_name=table_name)