Here is your one liner:
getattr(app_tables, db_name).search(**{db_field: value})
Here is a little explanation.
You use the built-in getattr()
function when you know the name of the attribute at runtime. These two are equivalent:
db_name = 'customers'
table = getattr(app_tables, db_name)
table = app_tables.customers
In Python you can use *
to expand a list of positional arguments and **
to expand a dictionary of named arguments. The search()
method expects you to name the columns as named arguments, so you can create a dictionary with the named arguments and expand it in the call with **
. These two are equivalent:
db_field = 'surname'
value = 'Smith'
dic = {db_field: value}
table.search(**dic)
table.search(surname='Smith')
ADMIN EDIT: Use
getattr()
instead of__getattr__()
. Explanation below! --Meredydd