我正在尝试使用带有Python 2.7的psycopg2将许多列插入到表行中。有没有办法缩短INSERT语法?我目前不得不一遍又一遍地输入占位符(%s),如VALUES(%s,%s,%s,...%s)
编辑: 目前我有
tableCursor.execute('INSERT INTO "table" ("x1","x2","x3","x4")' +
'VALUES (%s,%s,%s,%s)', (val1,val2,val3,val4))
我想使用的不仅仅是占位符,但是输入%s会有点重复。
答案 0 :(得分:3)
不。
如果您有足够的列,这是一个问题,那么(a)您可能需要重新考虑您的架构设计,并且(b)您始终可以使用', '.join(['%s']*n)
n
生成字符串的参数数量。
>>> ', '.join(['%s']*7)
'%s, %s, %s, %s, %s, %s, %s'
>>> 'INSERT INTO tablename(col1,col2,col3,col4,col5,col6,col7) VALUES (' + ', '.join(['%s']*7) + ');'
'INSERT INTO tablename(col1,col2,col3,col4,col5,col6,col7) VALUES (%s, %s, %s, %s, %s, %s, %s);'
我同意如果你没有明确地给出一个列,psycopg
根据命名的列数自动推断VALUES
列表会很好。但事实并非如此,而且DIY很容易。
答案 1 :(得分:1)
这也有效:
tableCursor.execute('INSERT INTO "table" ("x1","x2","x3","x4")' +
'VALUES %s', [(val1,val2,val3,val4)])
通过递归调整其参数并放入括号来调整元组,因此它们可以很好地表示IN的记录,复合类型或值列表。