将python参数返回给main函数的问题

时间:2017-09-14 06:14:42

标签: python mysql function dictionary tuples

问题:我试图从mysql搜索中提取值,以便稍后在代码中使用。 我已经设置了一个mysql函数(connector_mysql),用于连接/运行mysql命令。 我遇到的问题是将这些值从mysql函数返回到代码的其余部分。 我尝试了两种情况,我觉得应该可以运行,但不要运行。 下面的完整代码示例... 1.在mysql函数中,结果就像字典一样 - 只使用..

result = cursor.fetchone(variable1, variable2, variable3)
return result

和主要功能

    result1 = connector_mysql(subSerialNum, ldev, today_date)
    print(result1)

这似乎有效,当打印result1时,我会看到一个字典看输出:

    {'ldev_cap': '0938376656', 'ldev_usedcap': '90937763873'}

...无论其 然后我不能使用字典方法来获取或分离值...例如

used_capacity = result1['ldev_cap']

我原本预计现在' used_capacity'代表或等于0938376656。 相反,我得到一个关于该对象的错误无法下载...? 错误如下:

  File "/Users/graham/PycharmProjects/VmExtrat/VmExtract.py", line 160, in openRead
used_capacity = result1['ldev_cap']

TypeError:' NoneType'对象不可订阅

  1. 在mysql函数中,如果我操作它并尝试使用元组概念返回多个值,结果就像字典一样 - 使用..

    cursor.execute(sql_query, {'serial': subSerialNum, 'lun': ldev, 'todayD': today_date})
    result = cursor.fetchone()
    while result:
        ldev_cap = result['ldev_cap']
        ldev_usdcap = result['ldev_usdcap']
        return ldev_cap, ldev_usdcap
    
  2. 这里,结果就像字典一样,我可以为键分配一个参数,如:

    ldev_cap = result['ldev_cap']
    

    如果你打印ldev_cap,你会得到正确的数字...... 如果我返回一个数字,主要功能行为:

    result1 = connector_mysql(subSerialNum, ldev, today_date)
    

    它有效.... 然而... 然后尝试通过执行

    从mysql函数返回多个参数
    return ldev_cap, ldev_usdcap
    

    并在主要功能中:

    capacity, usd_capacity = connector_mysql(subSerialNum, ldev, today_date)
    

    我再次收到错误

      File "/Users/graham/PycharmProjects/VmExtrat/VmExtract.py", line 156, in openRead
    capacity, usd_capacity = connector_mysql(subSerialNum, ldev, today_date)
    

    TypeError:' NoneType'对象不可迭代

    我认为我正在使用字典和元组做正确的事情,但我显然缺少某些东西或者没有正确地做到这一点,因为我需要每个sql查询执行4-5个参数, 我不想为同样的事情做多个查询,以便让个别的参数完成。

    任何帮助或建议都会受到欢迎...... 完整的代码如下。

    主要代码:

    capacity, usd_capacity = connector_mysql(subSerialNum, ldev, today_date)
    print(capacity)
    print(usd_capacity)
    
    def connector_mysql(subSerialNum, ldev, today_date):
    
        import pymysql.cursors
    
        db_server = 'localhost'
        db_name = 'CBDB'
        db_pass = 'secure_password'
        db_user = 'user1'
    
        sql_query = (
            "SELECT ldev_cap, ldev_usdcap FROM Ldevs WHERE sub_serial=%(serial)s "
            "and ldev_id=%(lun)s and data_date=%(todayD)s")
    
        connection = pymysql.connect(host=db_server,
                                     user=db_user,
                                     password=db_pass,
                                     db=db_name,
                                     cursorclass=pymysql.cursors.DictCursor)
    
        try:
            with connection.cursor() as cursor:
                cursor.execute(sql_query, {'serial': subSerialNum, 'lun': ldev, 'todayD': today_date})
                result = cursor.fetchone()
                #return result          #used for returning dict
    
                while result:
                    ldev_cap = result['ldev_cap']
                    ldev_usdcap = result['ldev_usdcap']
    
                    print(result)
                    return ldev_cap, ldev_usdcap
    
        finally:
            connection.close()
    

0 个答案:

没有答案