我试图通过Psycopg2模块通过Python对PostgreSQL数据库进行基本的INSERT操作。我已经阅读了很多关于这个主题以及文档的问题,但我似乎做了一些独特的错误,并且没有任何修复似乎适用于我的代码。
#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']
我只是想让代码INSERT这些字符串作为表中的每一行。
运行时指定的错误是:
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)
我错过了什么?
答案 0 :(得分:1)
首先在您粘贴的代码中:
x = 0
for item in ulist:
idValue = list['members'][x]['name']
activeUsers.append(str(idValue))
x += 1
不是完成你想要做的事情的正确方法。 第一个列表是python中的保留字,你不应该将它用作变量名。我假设你的意思是溃疡。
如果你真的需要访问python中项目的索引,可以使用enumerate:
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)