有没有一种干净的方法可以使用 Python 中的字典调用方法来构建一行代码?
Is there a clean way to build a line of code with methods call from a dictionary in Python?
我想构建一个 SQLAlchemy 命令来从数据库中获取信息 table。为此,我使用了这行代码:
def new_rows(table, target):
command = select(table)
return command_execution(command)
Target 是一个字典,如果目标中存在一个键,我希望在 select 命令之后添加它。例如,如果目标是:
target = {
"limit": 20,
"order_by": "name"
}
那么我的命令会变成:
command = select(table).limit(20).order_by(table.c["name"])
有没有一种方法可以在 Python 中以干净的方式执行此操作?
使用getattr()
从字典的键中动态调用方法。
def new_rows(table, target):
command = select(table)
for key, value in target.items():
command = getattr(command, key)(value)
return command_execution(command)
最干净的路线可能是这样的:
command = select(table)
if (value := target.get('limit')):
command = command.limit(value)
if (value := target.get('order_by')):
command = command.order_by(value)
...
如果您绝对肯定 table 中的所有内容都是可以应用于命令的方法并且它们的顺序正确,您可以这样写:
command = select(table)
for key, value in target.items():
command = getattr(command, key)(value)
但这真的很难看,只有在您无法枚举可能的后缀时才应该这样做。
我想构建一个 SQLAlchemy 命令来从数据库中获取信息 table。为此,我使用了这行代码:
def new_rows(table, target):
command = select(table)
return command_execution(command)
Target 是一个字典,如果目标中存在一个键,我希望在 select 命令之后添加它。例如,如果目标是:
target = {
"limit": 20,
"order_by": "name"
}
那么我的命令会变成:
command = select(table).limit(20).order_by(table.c["name"])
有没有一种方法可以在 Python 中以干净的方式执行此操作?
使用getattr()
从字典的键中动态调用方法。
def new_rows(table, target):
command = select(table)
for key, value in target.items():
command = getattr(command, key)(value)
return command_execution(command)
最干净的路线可能是这样的:
command = select(table)
if (value := target.get('limit')):
command = command.limit(value)
if (value := target.get('order_by')):
command = command.order_by(value)
...
如果您绝对肯定 table 中的所有内容都是可以应用于命令的方法并且它们的顺序正确,您可以这样写:
command = select(table)
for key, value in target.items():
command = getattr(command, key)(value)
但这真的很难看,只有在您无法枚举可能的后缀时才应该这样做。