我的代码是:
with open(params['dataFile']) as df:
conn = psycopg2.connect(params['connStr'])
cur = conn.cursor()
its = 0
for line in df:
if its == 0:
pass
else:
row = tuple(line.replace('\n','').split(params['delimiter']))
try:
cur.execute(params['insQueryStr'],row)
except:
print(cur.mogrify(params['insQueryStr'],row))
print(row)
break
its += 1
conn.commit
conn.close
如果没有try/catch,则会产生以下结果:
^{pr2}$在try-catch中,对mogrify的调用显示了以下内容:
b'INSERT INTO mstest values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);'
我的查询字符串中的“%s”不会被调用的第二个参数的元素替换当前执行(). 为什么?打印行时,它包含我期望的值。在
{来自^ a1:
对于位置变量绑定,第二个参数必须始终是序列,即使它包含单个变量。请记住,Python需要逗号来创建单个元素元组: `在
`
这可能是你把元组喂错了光标.执行()
你的代码应该有用。我不知道为什么没有。你说你修改了元组。按原样发布元组,而不是修订版。不管怎样,下面要简单得多。在
由于Psycopg将Python元组调整为Postgresql记录,因此将其作为单个参数传递:
注意
row
后的逗号。它使row
元组本身成为参数。在相关问题 更多 >
编程相关推荐