2017-04-06 27 views
-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) 
+1

あなたは正しくコードをインデントします。それは判読不能です。 –

+0

** SQLインジェクションが可能です。**連結を使用してクエリを作成したり、パラメータ化されたクエリを使用したりしないでください。 – davidism

+0

ありがとう。このODBCドライバは、SELECTだけを許可します。データベースへの書き込みはありません。より良いハビットのためにパラメータ化されたクエリに調整します。 –

答えて

0

現在の変数は、スクリプトの最初の開始時に作成されただけです。したがって、一度ロードされると、それは現在の時刻に更新されませんでした。

各リクエストで変数が作成され、期待どおりに動作しています。

関連する問題