Python PyodBC查询循环仅返回一个结果



我已经包含了下面的代码。基本上,我有一个表(称为forumPosts),该表具有user_idchildrencontentid的列。childrenforumPosts的ID字符串,是后续论坛帖子(我不负责组织儿童帖子与父母帖子的同一表)。此字符串的格式如'["id1","id2",...]'

我的目标是产生一个看起来像:

的数据集
parent_user_id,child_user_id_1,child_user_id_2,...

这里的问题是以下代码仅打印一个输出。为什么这样做?感谢您的帮助。

import pyodbc

#connect to database, create db cursor
cnxn = pyodbc.connect('cnxnstring', autocommit=True)
cursor = cnxn.cursor()
for row in cursor.execute("select user_id,children from myTable where children!='[]' and user_id!='null'"):
    children=row[1].replace('"','').replace('[','').replace(']','').split(',')
    userid=row[0]
    for child in children:
        print cursor.execute("select user_id from myTable where id = ?",child).fetchone()

请求的列的示例数据:

  id           |  user_id    |  children
hgjegh4pjbr44p | gd6v7134AUa | ["asdf34dfg3sdfq", "asdegh4pjbrxx3"]
asdegh4pjbrxx3 | xzf7134AUax | ["hgjegh4pjbr44p"]
hgjegh4pjbr44p | NULL        | []
asdf34dfg3sdfq | adfcv34skax | []

说明

使用提供的示例数据,输出为:

('adfcv34skax', )
None

由于领先的空格,未返回asdegh4pjbrxx3 ID的一行。可以通过将最后的print行更改为:

来观察到这一点
print child

输出:

asdf34dfg3sdfq
 asdegh4pjbrxx3
hgjegh4pjbr44p

' asdegh4pjbrxx3'不等于 'asdegh4pjbrxx3',它返回null结果。

解决方案

children分配行替换为以下内容以剥离必要的字符和空格:

children=[child.strip('"[] ') for child in row[1].split(',')]

我认为单个strip呼叫的列表理解比嵌套replace更可读。

替代,ast.literal_eval也应该工作:

children=ast.literal_eval(row[1])

上面的答案是正确的,假设问题是您的孩子分配。您应该在儿童循环的孩子中进行内省或打印,以查看您的列表理解是否在做您打算做的事情。列表综合是一个有趣的事情:它们起作用,但不要做您打算做的事情,因为您的假设需要完美无瑕。在这种情况下,您不会考虑连接到数据库的所有可能输出。当您使用它时,您可能需要确保您的程序处理Parent Database程序可以接受的字符集。

相关内容

  • 没有找到相关文章

最新更新