3

我正在尝试使用 psycopg2 和 Python 2.7 将许多列插入到表行中。有没有办法缩短 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 有点重复。

4

2 回答 2

3

没有。

如果您有足够的列这是一个问题,那么 (a) 您可能需要重新考虑您的架构设计,并且 (b) 您始终可以使用', '.join(['%s']*n)wheren是参数的数量来生成字符串。

>>> ', '.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。

于 2012-11-29T05:07:57.487 回答
1

这也有效:

tableCursor.execute('INSERT INTO "table" ("x1","x2","x3","x4")' +
            'VALUES %s', [(val1,val2,val3,val4)])

元组通过递归调整其参数并放在括号中进行调整,因此它们很适合表示 IN 的记录、复合类型或值列表。

于 2012-11-30T11:00:46.980 回答