Как выбрать, используя sqlalchemy API с пунктами, где несколько фильтров? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь написать обобщенный c метод, который должен принимать словарь фильтра в качестве пары значений ключа и использовать sqlalchemy create select, поддерживающий несколько операторов where.

def _get_selected_field_value(self, table, fields, col_value=None):
    """Performs select Operation and gets the value of field.

    Arguments:
        table (sqlalchemy.Table) : table to select data from.
        fields (list) : fields whose value to retrieve.
        col_value (dict) : where column of table has value.
    """
    stmt = db.select(fields).where(tuple_(*list(col_value.keys())).in_(list(col_value.values())))

, но оказывается, что это

(Pdb) str(stmt)
'SELECT host.name \nFROM host \nWHERE (:param_1) IN ((:param_2))'

Это выглядит не так!

Итак, для таблицы, которая выглядит следующим образом:

+----+-----------------+--------------+---------------+-------------------+
| id | name            | user         | ip_address    | mac_address       |
+----+-----------------+--------------+---------------+-------------------+
|  1 | DietPi          | root         | 192.168.0.151 | bx:2x:ex:bx:9x:6x |
+----+-----------------+--------------+---------------+-------------------+

Я хочу

MariaDB [lan]> SELECT host.name from host WHERE host.user='root' and host.ip_address='192.168.0.151' ;
+--------+
| name   |
+--------+
| DietPi |
+--------+

1 Ответ

0 голосов
/ 27 февраля 2020

Пожалуйста, попробуйте следующий код:

stmt = db.select(fields).where(and_(*[column == value for column, value in col_value.items()]))
...