Die Abfrage:
Code: Select all
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
""")
(nur die Werte aktualisieren, die in dieser Schleife geändert wurden)
Code: Select all
connection.execute(queries.update_qc_sod.bindparams(qc_flag=qc_sod_new_row.QcSodTable.qc_flag, remarks=qc_sod_new_row.QcSodTable.remarks))
Code: Select all
connection.execute(queries.update_qc_sod.bindparams(qc_sod_new_row))
Code: Select all
connection.execute(queries.update_qc_sod, qc_sod_new_row)
Bearbeiten:
Um zu verdeutlichen, was ich versuche: Ich habe eine Select-Anweisung, die eine Union verwendet, um Zeilen aus der QcSodTable abzurufen. Anschließend durchläuft das Ergebnis eine Reihe von Qualitätskontrollen, um sicherzustellen, dass alle Daten gültig sind. Wenn die Daten geändert werden müssten, würden die Daten direkt danach eingefügt, damit sie später für andere Prüfungen bereit wären, die diese Daten möglicherweise verwenden müssen.
Code: Select all
qc_sod_row = connection.execute(queries.get_qc_sod_data).all()[0][0]
Code: Select all
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
Die obige Diktionsvariable ist ein Wörterbuch jedes Zeilennamens und des Parameters, den ich binden möchte.
Code: Select all
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
)
So wurde es zuvor über die OracleCX-Bibliothek gemacht:
Code: Select all
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
Ich habe auch versucht, SqlAlchemy zu verwenden, um die Anweisung zu erstellen:
Code: Select all
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"),
)
)
Mobile version