如何将列表值传递给 SQL Select 查询?
How to pass list values to SQL Select query?
SQL查询:
Select *
from table_name
where ID in (123)
and date in (Select max(date)
from table_name
where ID in (123))
我想在上面一次传递下面提到的列表值 SQL 查询并收集列表中每个 ID 的结果
套餐:cx_Oracle
我的尝试:
import cx_oracle
List= {123, 234,345,....}
List1 = []
query = " Select * from table_name where ID in (%s)
and date in (Select max(date) from table_name where ID in (%s))"
for j in List:
cursor1 = db_ora.cursor()
tb = cursor1.execute(query, params= List )
for i in tb:
List1.append(i)
提前谢谢你,如果你需要我这边的更多细节,请告诉我
据我所知,Oracle 不会接受这样的列表作为有效参数。将该值列表存储到单独的 table 中并将其用作查询的来源,例如
and t.date in (select max(t1.date) from table_name t1
where t1.id in (select st.id from some_table st)
)
或者,如果可能,将该逗号分隔值字符串拆分成行,例如
and t.date in (select max(t1.date) from table_name t1
where t1.id in (select regexp_substr(%s, '[^,]+', 1, level)
from dual
connect by level <= regexp_count(%s, ',') + 1
)
)
此外,我建议您在列名前加上 table 别名以避免可能的混淆。
如果你想保持它与你的原始代码相似,你可以使用字符串格式
Python 2
import cx_oracle
List= [123, 234,345,....]
List1 = []
masterQuery = " Select * from table_name where ID in (%s)
and date in (Select max(date) from table_name where ID in (%s))"
for j in List:
cursor1 = db_ora.cursor()
newQuery = masterQuery % (j, j)
tb = cursor1.execute(newQuery)
for i in tb:
List1.append(i)
Python 3
import cx_oracle
List= [123, 234,345,....]
List1 = []
masterQuery = " Select * from table_name where ID in {}
and date in (Select max(date) from table_name where ID in {})"
for j in List:
cursor1 = db_ora.cursor()
newQuery = masterQuery.format(j, j)
tb = cursor1.execute(newQuery)
for i in tb:
List1.append(i)
SQL查询:
Select *
from table_name
where ID in (123)
and date in (Select max(date)
from table_name
where ID in (123))
我想在上面一次传递下面提到的列表值 SQL 查询并收集列表中每个 ID 的结果 套餐:cx_Oracle
我的尝试:
import cx_oracle
List= {123, 234,345,....}
List1 = []
query = " Select * from table_name where ID in (%s)
and date in (Select max(date) from table_name where ID in (%s))"
for j in List:
cursor1 = db_ora.cursor()
tb = cursor1.execute(query, params= List )
for i in tb:
List1.append(i)
提前谢谢你,如果你需要我这边的更多细节,请告诉我
据我所知,Oracle 不会接受这样的列表作为有效参数。将该值列表存储到单独的 table 中并将其用作查询的来源,例如
and t.date in (select max(t1.date) from table_name t1
where t1.id in (select st.id from some_table st)
)
或者,如果可能,将该逗号分隔值字符串拆分成行,例如
and t.date in (select max(t1.date) from table_name t1
where t1.id in (select regexp_substr(%s, '[^,]+', 1, level)
from dual
connect by level <= regexp_count(%s, ',') + 1
)
)
此外,我建议您在列名前加上 table 别名以避免可能的混淆。
如果你想保持它与你的原始代码相似,你可以使用字符串格式
Python 2
import cx_oracle
List= [123, 234,345,....]
List1 = []
masterQuery = " Select * from table_name where ID in (%s)
and date in (Select max(date) from table_name where ID in (%s))"
for j in List:
cursor1 = db_ora.cursor()
newQuery = masterQuery % (j, j)
tb = cursor1.execute(newQuery)
for i in tb:
List1.append(i)
Python 3
import cx_oracle
List= [123, 234,345,....]
List1 = []
masterQuery = " Select * from table_name where ID in {}
and date in (Select max(date) from table_name where ID in {})"
for j in List:
cursor1 = db_ora.cursor()
newQuery = masterQuery.format(j, j)
tb = cursor1.execute(newQuery)
for i in tb:
List1.append(i)