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