在 Python 中準備及執行單一 SQL 陳述式
若要準備並執行單一 SQL 陳述式,請使用 ibm_db.exec_immediate 函數。 若要避免 SQL 注入攻擊的安全威脅,請僅使用 ibm_db.exec_immediate 函數來執行由靜態字串組成的 SQL 陳述式。 在 SQL 陳述式中插入代表使用者輸入的 Python 變數,可能會使您的應用程式遭受 SQL 注入攻擊。
開始之前
在 ibm_db API 中呼叫其中一個連線函數,以取得連線資源。 如需相關資訊,請參閱 在 Python 中連接至 IBM 資料庫伺服器。
程序
若要準備並執行單一 SQL 陳述式,請呼叫 ibm_db.exec_immediate 函數,並傳遞列出的引數:
- 連線
- 從 ibm_db.connect 或 ibm_db.pconnect 函數傳回的有效資料庫連線資源。
- statement
- 包含 SQL 陳述式的字串。 此字串可以包括 XMLQUERY 函數所呼叫的 XQuery 表示式。
- 選項
- 選用: 指定要針對結果集傳回之游標類型的字典。 您可以使用此參數來要求支援此類型游標之資料庫伺服器的可捲動游標。 依預設,會傳回僅向前游標。
如果函數呼叫失敗 (傳回False) ,您可以使用 ibm_db.stmt_error 或 ibm_db.stmt_errormsg 函數來擷取錯誤的診斷資訊。
如果函數呼叫成功,您可以使用 ibm_db.num_rows 函數來傳回 SQL 陳述式傳回或影響的列數。 如果 SQL 陳述式傳回結果集,您可以開始提取列。
如需 ibm_db API 的相關資訊,請參閱 https://github.com/ibmdb/python-ibmdb/wiki/APIs。
範例
範例 1: 執行單一 SQL 陳述式
import ibm_db
conn = ibm_db.connect("database","username","password")
stmt = ibm_db.exec_immediate(conn, "UPDATE employee SET bonus = '1000' WHERE job = 'MANAGER'")
print "Number of affected rows: ", ibm_db.num_rows(stmt)範例 2: 執行 XQuery 表示式
import ibm_db
conn = ibm_db.connect("database","username","password")
if conn:
sql = "SELECT XMLSERIALIZE(XMLQUERY('for $i in $t/address where $i/city = \"Olathe\" return <zip>{$i/zip/text()}</zip>' passing c.xmlcol as \"t\") AS CLOB(32k)) FROM xml_test c WHERE id = 1"
stmt = ibm_db.exec_immediate(conn, sql)
result = ibm_db.fetch_both(stmt)
while( result ):
print "Result from XMLSerialize and XMLQuery:", result[0]
result = ibm_db.fetch_both(stmt)
下一步
如果 SQL 陳述式傳回一或多個結果集,您可以開始從陳述式資源提取列。