首页 > 解决方案 > 如何在 sqlalchemy 更新查询中添加自定义列名?

问题描述

我有以下问题:

我在我的 python 方法中使用 sqlalchemy,如下所示:

def update_icao_airport_id(self, airport_sys_id, project_sys_id, custom_column, value):
        """
        Updates Airport icao_airport_id value.
        :param airport_sys_id: airport_sys_id value you want to change
        :param project_sys_id: project_sys_id which is associated with Airport
        :param value: icao_airport_id new value
        :return: number of rows affected
        """
        query = AIRPORT.update(). \
            where(AIRPORT.c.airport_sys_id == airport_sys_id). \
            where(AIRPORT.c.project_sys_id == project_sys_id). \
            values(custom_column=value)
        result = self.execute_query(query)
        return result

我希望能够用方法中传递的参数替换“custom_column”。我无法为列名工作,它仅适用于“=”或“==”之后的值,适用于 airport_sys_id、project_sys_id 和 value。

例如我想传入我的方法 (1, 2, name_column, cat) 并接收如下:

query = AIRPORT.update(). \
            where(AIRPORT.c.airport_sys_id == 1). \
            where(AIRPORT.c.project_sys_id == 2). \
            values(name_column=cat)

我尽我所能搜索但没有成功。我将非常感谢您的支持。问候。

标签: pythonpython-3.xsqlalchemy

解决方案


我的示例有一个可行的解决方案:

我们可以使用字典:

.values({custom_column: value})

然后我可以像这样在我的查询中使用它:

update_values = {custom_column: value}

query = AIRPORT.update(). \
        where(AIRPORT.c.airport_sys_id == airport_sys_id). \
        where(AIRPORT.c.project_sys_id == project_sys_id). \
        values(update_values)

推荐阅读