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])
我有一个列表: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])