Is there a clean way to build a line of code with methods call from a dictionary in Python?
I would like to build a SQLAlchemy command to get information from a database table. To do it I use this lines of code :
def new_rows(table, target):
command = select(table)
return command_execution(command)
Target is a dictionary and I would like that if a key is present in target, I add it after my select command. For example, if target is :
target = {
"limit": 20,
"order_by": "name"
}
then my command would become :
command = select(table).limit(20).order_by(table.c["name"])
Is there a way to do this in a clean way in Python ?
Solution 1:
The cleanest route is probably something like:
command = select(table)
if (value := target.get('limit')):
command = command.limit(value)
if (value := target.get('order_by')):
command = command.order_by(value)
...
If you're absolutely positive that everything in the table is a method that can be applied to a command and that they're in the right order, you could write:
command = select(table)
for key, value in target.items():
command = getattr(command, key)(value)
but it's really ugly, and you should only do it if you can't enumerate your possible suffixes.
Solution 2:
Use getattr()
to call methods dynamically from the keys of the dictionary.
def new_rows(table, target):
command = select(table)
for key, value in target.items():
command = getattr(command, key)(value)
return command_execution(command)