首先讓我說我才剛剛開始使用 Python,到目前為止我真的很喜歡它!
我正在嘗試創建一個 Python 腳本,該腳本根據另一個值更新 MySQL 資料庫中的某些值。我的那部分大部分都在作業,但無論我嘗試什么,我都無法讓腳本正確地迭代到其他行。目前,它只是需要的值(位置在ost_user__cdata從第一行),它適用于目標列的每一行(org_id在ost_user)。
如果有人感興趣,我想在這里完成的是根據最終用戶在其個人資料中選擇的自定義欄位更新 osTicket 中用戶的組織(在這種情況下,“組織”將代表用戶的辦公室位置是在,所以我希望用戶能夠自己選擇他們的位置并自動將他們放在正確的組織中)。osTicket 在應用程式中不允許這樣做(只有代理可以設定用戶的組織,這對于它的通常使用方式是有意義的),但是我發現可以通過資料庫進行設定。
非常感謝您對此的任何幫助!請看下面我的腳本。
謝謝!
import mysql.connector
db = mysql.connector.connect(
host="ip",
user="user",
passwd="pass",
database="db"
)
cursor = db.cursor(buffered=True)
cursor2 = db.cursor(buffered=True)
cursor.execute("SELECT id from ost_user")
goCheck = cursor.fetchone()
if (goCheck is not None):
#cursor.execute("SELECT * from ost_user__cdata WHERE user_id=" str(dbid))
##cursor.execute("SELECT * from ost_user")
cursor.execute("SELECT id from ost_user")
numrows = cursor.rowcount
row1 = cursor.fetchall()
#for id in cursor:
for id in range(0,numrows):
cursor2.execute("SELECT id from ost_user")
getID = cursor2.fetchone()
dbid = str(getID[0])
cursor2.execute("SELECT location from ost_user__cdata WHERE user_id=" (dbid))
loca = cursor2.fetchone()
sel = str(loca[0])
if (sel == "1"):
loc = "8"
elif (sel == "2"):
loc = "2"
elif (sel == "3"):
loc = "3"
elif (sel == "4"):
loc = "4"
elif (sel == "5"):
loc = "5"
elif (sel == "6"):
loc = "6"
elif (sel == "7"):
loc = "7"
elif (sel == "8"):
loc = "9"
else:
print("Location not recognized.")
quit()
cursor2.execute("UPDATE ost_user SET org_id=" (loc),"WHERE id=" (dbid))
db.commit()
print("User ID: " (dbid),"added to org: " (loc))
else:
print("?")
quit()
正在運行的輸出(目前 ost_user 表中只有 2 個條目,ID 為 3 和 4 - 用戶 3 確實屬于 org 9,但用戶 4 應該在 org 5 中):
User ID: 3 added to org: 9
User ID: 3 added to org: 9
uj5u.com熱心網友回復:
使用單個資料庫查詢執行此操作,而不是 Python 回圈。您可以使用CASE運算式來處理位置不直接映射到組織 ID 的情況。
UPDATE ost_user AS u
JOIN ost_user__cdata AS c ON u.id = c.user_id
SET u.org_id =
CASE c.location
WHEN '1' THEN '8'
WHEN '8' THEN '9'
ELSE c.location
END
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/396728.html
