0
我打算遍歷一個列表(或字典,其他數據類型,如果適用的話)將每個元素作爲參數傳遞給查詢,以減少每個項目的數據庫讀取時間(< 1500)我想作爲參數傳遞給查詢。我可以在for循環SQL查詢中使用Python列表嗎?
我無法解決cx_Oracle以外的非法變量名稱/數字問題。我已經嘗試了幾種不同的數據類型,甚至在for循環中將其清理爲一個字符串(在下面的註釋中),但每個都向我返回相同的錯誤。
有沒有辦法做到這一點,而不使用IN sql操作符(這是限制在我的數據庫版本的1000個參數)?我是否錯過了一個能夠更有效地做這種事情的模塊?
下面的代碼會導致以下錯誤:
cur2.execute(SQL2, param) cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number
這就是我工作的僞代碼:
#!/usr/bin/python
import cx_Oracle
ip = 'my.ip'
port = 1521
SID = 'ORADB'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
conn1 = cx_Oracle.connect('un','pw', dsn_tns)
conn2 = cx_Oracle.connect('un2/[email protected]/target')
SQL = "SELECT DISTINCT PARAM FROM TABLE"
if conn1:
cur = conn1.cursor()
cur.execute(SQL)
res = cur.fetchall()
if conn2:
SQL2 = "SELECT * FROM LARGE_TABLE WHERE COLUMN LIKE '%:paramstr%'"
realparamlist = list(res)
cur2 = conn2.cursor()
for param in realparamlist:
#eqpstr=str(param)
#eqpstr=eqpstr.strip('(').strip(')').strip(',').strip('\'')
#cur2.execute(SQL2, eqpstr)
cur2.execute(SQL2, param)
res2 = cur2.fetchall()
print res2
#todo other things with res2 and res
cur.close()
cur2.close()
conn1.close()
conn2.close()