python - 如何从 SQL 查询中获取单个列并将其添加到 Python 列表中

标签 python sql list

我有一个 SQL 查询,它将搜索数据库并返回包含至少 3 个不同列的单行,如下所示:

SELECT
  `epg_num` AS `epgNum`,
  `service_key` AS `serviceKey`,
  `service_name` AS `channelName`
FROM `ssr_services`
WHERE `epg_num` = %(channelValue)s

我只需要将服务 key 添加到我的代码中的列表中。

上面的 SQL 查询不能修改,因为它被其他东西使用,我不想只为这个函数编写一个新查询。上面的查询也是另一个模块中的一个函数,我调用它来尝试提取服务 key 。

用户在运行代码时将指定epg_num。然后将在 SQL 中返回一行,显示 epg_num、服务 key 和服务名称

进口:

import sys
import os
import MySQLdb
from subprocess import check_output, CalledProcessError
from collections import OrderedDict

from UPnP.core.proxy import ServerProxy
from Data_Types import PlannerExportEvent, PlannerExportResponse, UpnpError, Result, Channel, Event, Shelf
from Database_Connection import FetchAll, FetchOne
from Decorators import ResetRetry, Suppress
from Logs import Logging
from Utilities import GetRecycID, GetRackID, Wait

我目前的代码如下:

        if epgNumsList:
            serviceKeysList = self.GetMultiChannelInfo(epgNumsList=epgNumsList)
            print(serviceKeysList)
            whereString = "(epg_num IN ({epgNumsList}) AND epg_num LIKE '___')".format(epgNumsList=','.join(epgNumsList))

它使用以下内容:

    def GetMultiChannelInfo(self, epgNumsList=None):
        serviceKeys = []
        for epgNum in epgNumsList:
            retObj = self.GetChannelInfo(epgNum=epgNum)
            result = retObj.Result()
            if result:
                channelObj = retObj.Data()
                result = channelObj.serviceKey
                serviceKeys.append(result)
                print(result)

            else:
                print('Channel not found')
        print(serviceKeys)
        return Result(serviceKeys)

我看到以下错误:

Traceback (most recent call last):
  File "C:\Users\MHE36\workspace\Scripts\SkyPlus__UPnP_Set_Recordings.py", line 42, in <module>
    upnp.BackgroundRecordings(recordings, epgNumsList, serviceKeysList, duration)
  File "C:\Users\MHE36\workspace\Libraries\SuperPlanner.py", line 1154, in BackgroundRecordings
    print(serviceKeysList)
  File "C:\Users\MHE36\workspace\Libraries\Data_Types.py", line 32, in __repr__
    return 'Result (Result: {result}, Data: {data}, NumFailures: {numFailures})'.format(result=self.result, numFailures=self.numFailures)
KeyError: 'data'

我认为回溯与另一个模块中的这段代码相关:

def __repr__(self):
        return 'Result (Result: {result}, Data: {data}, NumFailures: {numFailures})'.format(result=self.result, numFailures=self.numFailures)

希望这能提供足够的详细信息,但如果需要,我们很乐意提供更多信息。

提前致谢。

最佳答案

您如何执行该查询?与 pyodbc? 那么你实际上可以将该特定行放入字典中

columns = [column[0] for column in cursor.description]
list_of_dict =[]
for dict in cursor.fetchall():
    list_of_dict.append(dict(zip(columns, dict)))

打印 list_of_dict 你就会明白一切。

注意:在执行该代码块之前不应执行其他查询,因为光标将被刷新。

我建议您访问该列表并在出于某种原因执行该查询时返回您想要的内容。

关于python - 如何从 SQL 查询中获取单个列并将其添加到 Python 列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631549/

相关文章:

python - Python 元类中的继承如何工作?

python - Pandas 数据框中的新变量计算连续值

sql - 验证元素时出错会停止迁移或 bacpac 备份

mysql - 连接并到列

sql - Postgres : Get value of a column corresponding to max of other column in a group

excel - 处理电子邮件地址列表的最佳方式

Python:遍历列表列表中的列以查找回文

c++ - std::list pop 和 erase 方法无法销毁已删除的项目

java - 用于图实现的 Python Java 集成

python - 在python中,如何检查导入模块方法的函数形式