【问题标题】:convert list to tuples to avoid maximum number of expressions in a list is 1000 in python sql query将列表转换为元组以避免列表中的最大表达式数在 python sql 查询中为 1000
【发布时间】:2022-01-26 12:12:45
【问题描述】:

我在 python 中有列表,我已将此列表转换为 oracle sql 列表以进行 sql 查询,但出现错误 列表中的最大表达式数为 1000 我想将其转换列出元组,以便我可以解决此错误。 此列表不时随随机数变化。

我的代码

# convert column to list

samples_numbers = samples.loc[:, "cut_num"].values.tolist()

# convert python list  to sql list

sqllist = str(samples_numbers)
sqllist = sqllist.replace("[", "(").replace("]", ")")

# statment to make query read from list

statment = "select from sample_table where data in" + sqllist 
result  = pd.read_sql_query(statement, engine)

我想要我的代码而不是 从样本表中选择(500,507,5007,5008,....,100000)中的数据从样本表中选择((500,0),(507,0),(5007,0),(5008,0),....,(100000,0)) 中的数据 避免列表中的最大表达式数为 1000

错误信息 sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) ORA-01795: 列表中的最大表达式数为 1000

【问题讨论】:

  • 我认为这行不通;我应该认为您需要将列表分成块并运行多个查询。
  • 所以如果你有合适的解决方案,请在这里提交

标签: python mysql sql pandas sqlalchemy


【解决方案1】:

一旦你使用这个生成你的list

samples_numbers = samples.loc[:, "cut_num"].values.tolist()

您可以创建空列表的变量sqlite,然后根据条件(504,0),(507,0)....(100000,0)创建该列表的每个值append

sqllist = []

for each in samples_numbers:
    sqllist.append((each, 0))

然后您可以使用以下代码将 sqlite 类型转换为 tuple

sqllist = tuple(sqllist)

输出

print(sqlite)
((500, 0), (507, 0), ..., (100000, 0))

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多