【问题标题】:adding data to arrays in python with for loops from sql data return使用来自sql数据返回的for循环将数据添加到python中的数组
【发布时间】:2019-09-25 10:38:49
【问题描述】:

我正在尝试将数据添加到循环内的数组中,因为每一行都是列并且返回行。

我的目标是将列排序为几个数组,但这似乎不起作用。我整个下午都在谷歌上搜索如何在 python 中执行此操作。 W3 学校正在展示类似的东西,但它不会起作用,他们的简单数组示例也不会起作用,例如array[0] = "text" ,并不断返回 NameError: 'ReturnedUser_id' is not defined 的错误。

然后我希望在我将这段代码转换为函数后将这些数组传递出去。

谁能帮帮我?

谢谢

import mysql.connector

mydb = mysql.connector.connect(

import mysql.connector

mydb = mysql.connector.connect(
  host="xxx.xxx.xxx.xxx",
  user="xxxxxxx",
  passwd="xxxxxx",
  database="vmware"
)

print(mydb)

mycursor = mydb.cursor()

mycursor.execute("select UserID, VMName, VMTemplate FROM VM WHERE CommissionStatus='commissioned';")


c = 0
for (User_id, VMName, VMTemplate) in mycursor:

    c += 1

    ReturnedUser_id[c] = User_id
    ReturnedVMName[c] = VMName
    ReturnedVMTemplate[c] = VMTemplate

【问题讨论】:

  • 您忘记定义 ReturnedUser_id、ReturnedVMName 和 ReturnedVMTemplate - 可能是:ReturnedVMTemplate = [],然后像 ReturnedVMTemplate.append() 一样使用它
  • 顺便说一句 - 我强烈建议不要创建 3 个列表,而是创建一个 class VM,添加一个 from_row() 静态方法来从 SQL 行初始化类,然后存储所有VM 实例列表中的数据:)

标签: python sql arrays loops


【解决方案1】:

要解决当前架构的问题,您需要将逻辑替换为:

ReturnedUser_id = []
ReturnedVMName = [] 
ReturnedVMTemplate = []

for (User_id, VMName, VMTemplate) in mycursor:
    ReturnedUser_id.append(User_id)
    ReturnedVMName.append(VMName)
    ReturnedVMTemplate.append(VMTemplate)

我会怎么做:


class VM:
    def __init__(self, user_id, name, template):
        self.user_id = user_id
        self.name = name
        self.template = template

    @staticmethod
    def from_row(row):
        return VM(row[0], row[1], row[2])

all_vms = []
for row in mycursor:
    all_vms.append(VM.from_row(row))

这允许您稍后在 VM 类中添加更多的恶魔和功能,而不是传递三个列表,您只传递一个!

【讨论】:

  • 选项 A 可能暂时更容易使用。有没有办法将所有三个数组作为回报?
  • 是的,return a, b, c 应该这样做。我认为它实际上会返回一个 3 项元组
猜你喜欢
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
相关资源
最近更新 更多