Python SQL - 将值插入列表中的可识别列

Python SQL - Inserting values into identifiable columns from List

我有一个列表:reward_coupons,这是一个长度范围为 1-9 并包含奖励 ID 的列表。

我有一个 table(我从标识符 table 名称中调用),其中包含 9 个名为 reward_id_01、reward_id_02...[=29= 的列].

在我的 reward_coupons 列表中,客户可以获得 1 到 9 个奖励,所以我想创建一个循环,将我列表中的值(按顺序)插入到 table(标识符($table_name))

for i in range(len(reward_coupons)):
    cs.execute("""SET reward_id_name =(SELECT 'reward_id_0');""")
    cs.execute("""SET column_number = (%s)""",(str(i+1)))
    cs.execute("""SET Column_Name = (SELECT concat($reward_id_name,$column_number))""")
    get_column_name = (cs.execute("SELECT $Column_name;").fetch_pandas_all())
    cs.execute("""UPDATE identifier ($table_name) SET (%s) = (%s)""",(get_column_name.astype(str),reward_coupons[i]))

但是我得到以下错误:

snowflake.connector.errors.ProgrammingError:252004:处理 pyformat 参数失败; 255001:不支持绑定数据类型(dataframe)

从我的奖励优惠券列表中插入这些列的最佳方式是什么?谢谢!

我找到了解决这个问题的方法。

似乎因为“Column”不是数据类型,所以您不能使用以下语法传递变量:

...(%s)""",(get_column_name.astype(str))

这会传递一个文字字符串,其中 SQL 编译器不会将列名识别为字符串。 下面的代码使用 % 而不是逗号,传递字符串中的内容并允许 SQL 执行。

for i in range(len(reward_coupons)):
    cs.execute("""SET reward_id_name =(SELECT 'reward_id_0');""")
    cs.execute("""SET column_number = (%s)""",(str(i+1)))
    cs.execute("""SET Column_Name = (SELECT concat($reward_id_name,$column_number))""")
    get_column_name = (cs.execute("SELECT $Column_name;").fetch_pandas_all())
    query = """UPDATE identifier ($table_name) SET (%s)"""%(get_column_name.astype(str).iloc[0][0]
    query = query + """ = (%s)"""
    cs.execute(query,reward_coupons[i])