首页 > 解决方案 > 是否可以在 python 中将单列结果作为字符串而不是数组获取?

问题描述

我想知道是否可以从数据库中获取数据作为字符串而不是结果集数组

问题是我需要从数据库表中获取的字符串数组

Table `example`
+-------------+
| id, name    |
| 1,  string1 |
| 2,  string2 |
| 3,  string3 |
+-------------+

现在,如果我使用光标从中获取

cursor.execute("SELECT DISTINCT `name` FROM `example`")
rs = cursor.fetchall()

我得到的结果是:

rs = [['string1'], ['string2'], ['string3']]

我想要实现的是:

rs = ['string1', 'string2', 'string3']

现在为了实现它,我遍历所有获取的结果并将其转换为这样的新数组:

newArr = []
for row in rs:
   newArr.append(row[0])

有没有更快的方法来得到这个结果?

我想这样做的原因是因为我想检查一个字符串是否存在于数组中

if "string4" in newArr:
  doSomething()

我正在尝试以这种方式执行此操作,因为我不想为每个字符串发送我正在检查数据库的查询并执行类似的操作

for somestring in stringArray:
  cursor.execute("SELECT `name` FROM `example` WHERE `name` = %s", (somestring,))
  rs = cursor.fetchall()
  if len(rs) > 0:
    doSomething()

因为我要检查大约 20k 个字符串,所以我认为首先从数据库中获取所有字符串作为数组然后检查它是否存在于数组中会更快。

那么你认为实现我目标的最快方法是什么?是否可以直接从数据库中获取结果作为字符串而不是数组?

谢谢你的时间!

标签: pythonmysqlarrays

解决方案


itertools 库有一个函数,可以取消列出传入的可迭代对象

from itertools import chain

rs = [['string1'], ['string2'], ['string3']]

list(chain(*rs))

会产生如下结果

在此处输入图像描述


推荐阅读