Python 将函数的参数列表插入数据库
我使用inspect模块尝试将Python函数的参数列表插入到PostgreSQL数据库中。我设法将这些参数打印出来,但没有插入数据库。我得到了这个错误:Python 将函数的参数列表插入数据库,python,postgresql,Python,Postgresql,我使用inspect模块尝试将Python函数的参数列表插入到PostgreSQL数据库中。我设法将这些参数打印出来,但没有插入数据库。我得到了这个错误: ERROR: Mixing iteration and read methods would lose data 代码: 这句话就是问题所在: cu.execute("INSERT INTO tmp VALUES (a,b,c) " + (i, values[i])) #doesn't work 在for循环下,您正在执行args中的每个
ERROR: Mixing iteration and read methods would lose data
代码:
这句话就是问题所在:
cu.execute("INSERT INTO tmp VALUES (a,b,c) " + (i, values[i])) #doesn't work
在for循环下,您正在执行args中的每个i,它转换为:
cu.execute("INSERT INTO tmp VALUES (a,b,c) " + ('a', 1))
cu.execute("INSERT INTO tmp VALUES (a,b,c) " + ('b', 2))
cu.execute("INSERT INTO tmp VALUES (a,b,c) " + ('c', 3))
但是,您的值有3个值a、b、c,因此它会抛出一个错误,将您的execute语句放在for循环之后应该可以工作:
args, _, _, values = inspect.getargvalues(frame)
for i in args:
print " %s = %s" % (i, values[i]) #works
cu.execute("INSERT INTO tmp VALUES (%s,%s,%s);", tuple(values[a] for a in args) )
cx.commit()
事实上,您可以只执行而不使用args。不确定为什么要从inspect中提取args,而不是直接将其传递给execute:
希望这能有所帮助。当您想使用inspect在数据库中插入值时,您的目标是什么?@XavierCombelle我试图将它们保存到列表中,我仍然收到相同的错误,但您的回答给了我另一个想法,谢谢@Shad,这是因为args在列表中吗?不管怎样,很高兴它能帮上忙:新年快乐way@Shad,啊,我看到args将转换为'a','b','c'作为字符串。。。让我更新我的答案
args, _, _, values = inspect.getargvalues(frame)
for i in args:
print " %s = %s" % (i, values[i]) #works
cu.execute("INSERT INTO tmp VALUES (%s,%s,%s);", tuple(values[a] for a in args) )
cx.commit()
cu.execute("INSERT INTO tmp VALUES (%s,%s,%s);", (a, b, c))
...