将列表或元组插入 table 而无需迭代到 postgresql

Insert list or tuple into table without iteration into postgresql

我是 python 的新手。我想要实现的是将 list/tuple 中的值插入到我的 redshift table 中,而没有 iteration.I 大约有 100 万行和 1 列。
下面是我用来创建 list/tuple.

的代码
cursor1.execute("select domain from url limit 5;")
for record, in cursor1:
    ext = tldextract.extract(record)
    mylist.append(ext.domain + '.' + ext.suffix)

mytuple = tuple(mylist)

我不确定最好使用什么,元组还是列表。 print(mylist)print(mytuple) 的输出如下。

List output
['friv.com', 'steep.tv', 'wordpress.com', 'fineartblogger.net', 'v56.org']
Tuple Output
('friv.com', 'steep.tv', 'wordpress.com', 'fineartblogger.net', 'v56.org')

现在,下面是我用来将值插入到我的 redshift table 中的代码,但出现错误:

cursor2.execute("INSERT INTO sample(domain) VALUES (%s)", mylist) or
cursor2.execute("INSERT INTO sample(domain) VALUES (%s)", mytuple)

Error - not all arguments converted during string formatting

感谢任何帮助。如果需要任何其他详细信息,请告诉我,我将编辑我的问题。

更新 1:

尝试使用以下代码并出现不同的错误。

args_str = ','.join(cur.mogrify("(%s)", x) for x in mylist)
cur.execute("INSERT INTO table VALUES " + args_str) 

ERROR - INSERT has more expressions than target columns

我想你在找 Fast Execution helpers:

mylist=[('t1',), ('t2',)] 
execute_values(cursor2, "INSERT INTO sample(domain) %s", mylist, page_size=100)

它的作用是将 %s 替换为 100 个值。我不确定您可以设置多高 page_size,但这应该会更高效。

终于找到解决办法了。出于某种原因 cur.mogrify 没有给我正确的 sql 插入字符串。创建了我自己的 SQl 字符串,它比 cur.executeall()

快很多
list_size = len(mylist)

for len in range(0,list_size):
    if ( len != list_size-1 ):
        sql = sql + ' ('+ "'"+  mylist[len] + "'"+ ') ,'
    else:
        sql = sql + '('+ "'"+  mylist[len] + "'"+ ')'

cursor1.execute("INSERT into sample(domain) values " + sql)

感谢大家的帮助!