Универсальная функция, которая принимает имя таблицы и столбца и возвращает все значения первичного ключа, которые соответствуют заданному значению фильтра - PullRequest
1 голос
/ 10 мая 2010

У меня есть функции, которые выглядят так, что они засорены кодом

def get_M_status(S): 
    M_id = marital.select(marital.c.marital_status_description == S).execute().fetchone()
    if M_id == None:
        print "Warning: No Marital id found for %s Marital status to Single" % S
        M_id = marital.select(marital.c.marital_status_description == "Single").execute().fetchone()       
    return M_id[0]

Мне было интересно, если это способ написать универсальную функцию, где я могу передать соответствующие значения, например: имя таблицы столбец фильтра столбца первичного ключа и значение фильтра

ура

Ответы [ 2 ]

1 голос
/ 11 мая 2010

Объект таблицы имеет атрибут primary_key, который содержит столбцы, составляющие первичный ключ. Выберите это, просто добавьте предложение where, и все готово:

def get_pks_by_col(tbl, col_name, col_value):
    s = select(tbl.primary_key.columns).where(tbl.columns[col_name] == col_value)
    return s.execute().fetchall()

Изменить в соответствии с вашими конкретными условиями. (len (tbl.primary_key) == 1 гарантировано, необходимо передать соединение для выполнения и т. д.)

1 голос
/ 10 мая 2010

Если первичный ключ - только один столбец, вы можете сделать что-то вроде:

getattr(table.c, pkey_col_name) == S

как «общая» версия marital.c.marital_status_description == S.

Итак, что-то вроде (обратите внимание: это не проверено):

def get_row(table, col_name, val, default=None):
    col = getattr(table.c, col_name)
    row = table.select(col == S).execute().fetchone()
    if row == None:
        print "Warning: No row found for %s in %s; using %s" % (val, table, default)
        row = table.select(col == default).execute().fetchone()       
    return row[0]

Если у вас есть сопоставленные классы, это еще проще; Вы можете делать такие вещи, как:

record = session.query(Marital).get(key)

где Marital - сопоставленный класс для таблицы marital, session - сеанс алхимии sql, key - кортеж ключевых столбцов (по порядку) Если ключ существует в таблице, record будет найденной строкой; в противном случае это будет None.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...