-2
PythonでFlask接続からPYODBC接続をクエリする際に問題が発生しているようです。当初、私はファイル全体を同じ接続を使用していましたが、GetリクエストのURLをヒットしたときに最新のデータを返さないことに気付きました。だから私は、開始要求が開始されるたびに同じ非更新データを返す接続を開始し、終了するスクリプトを調整しました。時にはデータを更新することがありますが、ほとんどの場合、データは更新されません。PYODBCとFLASK Pythonで更新されたDBデータを取得できません
このプロセスをより明確にしてください。
def getChg(s, cursor, arr):
getIncResolved = "SELECT COUNT(incident.number) FROM SCHEMA.OAUSER.incident incident WHERE incident.dv_resolved_by = '" + str(s) + "' AND incident.resolved_at BETWEEN '" + str(past) + "' AND '" + str(current) + "' AND incident.dv_opened_by != '" + str(s) + "';"
getTaskResolved = "SELECT COUNT(sc_task.number) FROM SCHEMA.OAUSER.sc_task sc_task WHERE sc_task.dv_closed_by = '" + str(s) + "' AND sc_task.closed_at BETWEEN '" + str(past) + "' AND '" + str(current) + "' AND sc_task.dv_opened_by != '" + str(s) + "';"
getCallStarted = "SELECT COUNT(new_call.number) FROM SCHEMA.OAUSER.new_call new_call WHERE new_call.opened_at BETWEEN '" + str(past) + "' AND '" + str(current) + "' AND new_call.dv_opened_by = '" + str(s) + "';"
i = 0
t = 0
c = 0
cursor.execute(getIncResolved)
for row in cursor.fetchall():
i = row[0]
cursor.execute(getTaskResolved)
for row in cursor.fetchall():
t = row[0]
cursor.execute(getCallStarted)
for row in cursor.fetchall():
c = row[0]
if c > -1:
test = {'Agent': str(s), 'Calls': c, 'Inc': i, 'Task': t}
arr.append(test)
@app.route('/data',methods=['GET', 'POST'])
def api_root(): cnxn=pyodbc.connect('DSN=ServiceNow;Uid=ServiceOps;Pwd=********;',autocommit=True)
cursor = cnxn.cursor()
data = []
staffjson = request.get_json(force=True)
staff = staffjson['users']
print(staff)
del data[:]
for s in staff:
getChg(s, cursor, data)
print(data)
cnxn.close()
return json.dumps(data)
あなたは正しくコードをインデントします。それは判読不能です。 –
** SQLインジェクションが可能です。**連結を使用してクエリを作成したり、パラメータ化されたクエリを使用したりしないでください。 – davidism
ありがとう。このODBCドライバは、SELECTだけを許可します。データベースへの書き込みはありません。より良いハビットのためにパラメータ化されたクエリに調整します。 –