Запрос:
Код: Выделить всё
update_qc_sod = text(f"""
update {QcSodTable.__table__.fullname}
stn_ops = :stn_ops,
precip_trace = :precip_trace,
precip = :precip,
precip_period = :precip_period,
temp_max = :temp_max,
temp_min = :temp_min
where platformid = :platformid and
trim(networktype) = :networktype and
datetime = :datetime
""")
(обновляйте только те значения, которые были изменены в этом цикле)
Код: Выделить всё
connection.execute(queries.update_qc_sod.bindparams(qc_flag=qc_sod_new_row.QcSodTable.qc_flag, remarks=qc_sod_new_row.QcSodTable.remarks))
Код: Выделить всё
connection.execute(queries.update_qc_sod.bindparams(qc_sod_new_row))
Код: Выделить всё
connection.execute(queries.update_qc_sod, qc_sod_new_row)
Изменить:
Итак, чтобы прояснить, что я пытаюсь сделать: у меня есть оператор select, который использует объединение для захвата строк из QcSodTable. После этого результат проходит серию проверок качества, чтобы убедиться, что все данные действительны. Если данные необходимо изменить, они будут вставлены сразу после этого, чтобы они были готовы к другим проверкам в дальнейшем, которым может потребоваться использовать эти данные.
Код: Выделить всё
qc_sod_row = connection.execute(queries.get_qc_sod_data).all()[0][0]
Код: Выделить всё
def check_datetimes(connection, qc_sod_row, algorithm, is_good):
"""
if local_time or date does not exist, then add remarks and
add alg flag of C00/01
"""
qc_sod_new_row = copy.deepcopy(qc_sod_row)
if not is_good:
qc_sod_new_row.remarks = utils.update_remarks(qc_sod_row.remarks, algorithm)
qc_sod_new_row.qc_flag = "F"
# Update the QC_SOD table with new values
diction = utils.bind_qc_sod(queries.update_qc_sod, qc_sod_new_row)
connection.execute(queries.update_qc_sod, diction)
return qc_sod_new_row
Вышеупомянутая переменная словаря представляет собой словарь каждого имени строки и параметра, который я хочу связать
Код: Выделить всё
diction = dict(
stn_ops= qc_sod.stn_ops,
precip_trace= qc_sod.precip_trace,
precip= qc_sod.precip,
precip_period= qc_sod.precip_period,
temp_max= qc_sod.temp_max,
temp_min= qc_sod.temp_min,
wind_gust_dir= qc_sod.wind_gust_dir
)
Вот как это делалось ранее с помощью библиотеки OracleCX:
Код: Выделить всё
def chk_localtime(qc_sod_row, time_conv, sod_connection):
ALG_FLAG = "C00"
qc_sod_row_new = qc_sod_row.copy()
if not local_time_check(time_conv):
cursor_sod = sod_connection.cursor()
qc_sod_row_new["REMARKS"] = utils.update_remarks(qc_sod_row, ALG_FLAG)
qc_sod_row_new["QC_FLAG"] = "F"
#Update the QC_SOD table with new values
cursor_sod.execute(qc_sod_queries.update_qc_sod, qc_sod_row_new)
cursor_sod.close()
return qc_sod_row_new
Я еще попробовал использовать SqlAlchemy для создания оператора:
Код: Выделить всё
update_qc_sod = (
update(QcSodTable)
.where(
QcSodTable.platformid == bindparam("platformid"),
func.trim(QcSodTable.networktype) == bindparam("networktype"),
QcSodTable.datetime == bindparam("datetime")
)
.values(
stn_ops=bindparam("stn_ops"),
precip_trace=bindparam("precip_trace"),
precip=bindparam("precip"),
precip_period=bindparam("precip_period"),
temp_max=bindparam("temp_max"),
temp_min=bindparam("temp_min"),
wind_gust_dir=bindparam("wind_gust_dir"),
)
)
Подробнее здесь: https://stackoverflow.com/questions/798 ... -as-values
Мобильная версия