我试图弄清楚如何将值的元组插入到预定义的表中,而不需要像这样的简单语法:
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",
... (100, "abc'def"))
因为我的元组具有正确的值序列,如下所示:
my_tuple = ('D', 'Z107383320', '99501', '995013688', None, '36', '88', '36', '88', 'A', 'F', 'C083', '', 'BARROW', 'ST', '', '0000000605', '0000000605', 'O', 'DOCTORS COLLECTIONS SVC', 'STE', '00000001', '00000001', 'O', 'B', '', '', '020312', 'AK', '020', 'AL', '', '', 'Z10014', 'zip4mst9')
我想知道一些简单的解决方案:-)比如:
cur.execute("INSERT INTO test (*) VALUES (*)",
... (my_tuple))
由于我创建了表模式并且元组具有相同的属性序列,我想这是可以做到的,而无需将所有参数一一传递给 cur.execute()
使用此表
create table t (
a int,
b text
);
省略列列表并将元组作为单个值传递
query = """
insert into t values %s
returning *
"""
my_tuple = (2, 'b')
cursor.execute(query, (my_tuple,)) # Notice the comma after my_tuple
rs = cursor.fetchall()
conn.commit()
for row in rs:
print row
打印
(2, 'b')
完成上述操作后,在我看来,不明确列出列是不好的做法
鉴于:
t = (100, "abc'def")
然后:
sql = "INSERT INTO test (num, data) VALUES (" + ",".join(["%s"]*len(t)) + ")"
cur.execute(sql, t)
即每个字段重复一次占位符,以逗号分隔。
是的,它很丑,但是没有神奇的“所有参数”通配符。也许应该有。
查询将继续使用 %s 你可以像下面这样做
tuple_ex = (值1, 值2)
mycursor = mydb.cursor() mycursor.execute(查询,tuple_ex)