使用字符串列表的 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)
我正在尝试通过 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)