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

у меня есть функции, которые похожи на это, которое замусорено через код

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]

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

удачи

1
задан nashr rafeeg 10 May 2010 в 08:32
поделиться

2 ответа

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

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 - это набор ключевых столбцов (по порядку). Если ключ существует в таблице, найденной строкой будет запись ; в противном случае будет Нет .

1
ответ дан 3 September 2019 в 00:41
поделиться

Объект таблицы имеет атрибут 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
ответ дан 3 September 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: