繁体   English   中英

如何将列表值传递给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不会接受此类列表作为有效参数。 将该值列表存储到单独的表中,然后将其用作查询的源,例如

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
                              )
              )

另外,我建议您在列名之前使用表别名,以免造成混淆。

如果要使其与原始代码相似,则可以使用字符串格式

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM