使用字符串列表的 executemany() INSERT 语句期间出现类型错误

TypeError during executemany() INSERT statement using a list of strings

我正在尝试通过 Python 通过 Psycopg2 模块对 PostgreSQL 数据库执行基本的 INSERT 操作。我已经阅读了很多已经发布的关于这个主题的问题以及文档,但我似乎做了一些特别错误的事情,none 的修复似乎适用于我的代码。

#API CALL + JSON decoding here
x = 0
for item in ulist:
    idValue = list['members'][x]['name']
    activeUsers.append(str(idValue))
    x += 1

dbShell.executemany("""INSERT INTO slickusers (username) VALUES (%s)""", activeUsers
)

循环创建一个字符串列表,打印时如下所示:

['b2ong', 'dune', 'drble', 'drars', 'feman', 'got', 'urbo']

我只是想让代码将这些字符串作为 1 行插入 table。

运行时指定的错误是:

TypeError: not all arguments converted during string formatting

我尝试将 INSERT 更改为:

dbShell.executemany("INSERT INTO slackusers (username) VALUES (%s)", (activeUsers,) )

但这似乎只是将整个列表视为一个字符串,因为它会产生:

psycopg2.DataError: value too long for type character varying(30)

我错过了什么?

首先在您粘贴的代码中:

x = 0
for item in ulist:
    idValue = list['members'][x]['name']
    activeUsers.append(str(idValue))
    x += 1

这不是完成您想要做的事情的正确方法。 第一个列表是 python 中的保留字,您不应将其用作变量名。我假设你的意思是 ulist。

如果您确实需要访问 python 中某个项目的索引,您可以使用枚举:

for x, item in enumerate(ulist):

但是,做您想做的事情的最好方法是

for item in ulist: # or list['members'] Your example is kinda broken here
    activeUsers.append(str(item['name']))

您的第一次尝试是:

['b2ong', 'dune', 'drble', 'drars', 'feman', 'got', 'urbo']

您的第二次尝试是:

(['b2ong', 'dune', 'drble', 'drars', 'feman', 'got', 'urbo'], )

我想你想要的是:

[['b2ong'], ['dune'], ['drble'], ['drars'], ['feman'], ['got'], ['urbo']]

您可以通过多种方式获得:

dbShell.executemany("INSERT INTO slackusers (username) VALUES (%s)", [ [a] for a in activeUsers] )

或更好的事件:

for item in ulist: # or list['members'] Your example is kinda broken here
    activeUsers.append([str(item['name'])])
dbShell.executemany("""INSERT INTO slickusers (username) VALUES (%s)""", activeUsers)