Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数的参数列表插入数据库_Python_Postgresql - Fatal编程技术网

Python 将函数的参数列表插入数据库

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中的每个

我使用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中的每个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)) 
...