函数的Python mysql输出不起作用

时间:2017-09-14 02:05:38

标签: python mysql function parameters

我在Python方面相对较新,但在Java方面有较多经验,所以我理解大部分概念。但是,我一直遇到MySQL的问题,并使用MySQL从函数传回信息  以后在另一个功能中使用。

我需要使用多个返回字段进行复杂的MySQL查询,因此我不希望为每个SQL字段运行多个SQL查询,因为这会粉碎数据库。 说以下是我想要实现的一个小例子。

我想要一个函数来运行从其他地方获取参数的SQL查询(def connectory_mysql()),(这部分可以工作)然后获取SQL查询的输出并传回给要使用的main函数。 然后,main函数需要对不同的参数使用SQL查询的不同列结果。

我可以返回结果并将其分配给出现的result1,在打印时看起来像字典,但是我无法拆分/使用result1 = connector_mysql中的不同键或数据(subSerialNum,ldev,today_date) 如果我在返回之前在SQL函数中拆分字典中的键,即ldev_cap = result ['ldev_cap'] 我可以在SQL函数中打印单个元素...但是,我似乎无法将参数传递回主函数并将它们拆分出来?

我一定错过了一些简单的事情,或者我不理解某些事情......我们将非常感谢任何帮助或帮助......

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

print(result1)  #this works and appears to be a dictionary, but I can split it 
                 ## into its elements like:
ldev_cap = result1['ldev_cap']   ##-> this dosn't work here.....???? if i return it as a dictonary..
                #and i'm unsure how to split them when i pass just the paramaters 
                #back if i split the dictionary in the sql function.

...

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()

            while result:
                ldev_cap = result['ldev_cap']   #here the dictionary acts as 
                                        #expected and i can assign a value
                ldev_usdcap = result['ldev_usdcap']

                print(result)
                return ldev_cap, ldev_usdcap   #here i can return 

    finally:
        connection.close()

任何帮助或帮助都会被大量批评......

干杯 格雷厄姆

1 个答案:

答案 0 :(得分:0)

首先,你应该熟悉编写python代码的Python style guide

根据您现有的代码,result1将返回包含(ldev_cap, ldef_usdcap)值的元组(它不是目录)。您可以result1[0]访问返回结果,该结果对应于ldev_capresult1[1]的返回值,该返回值对应于ldev_usdcap的返回值。

或者,由于您要返回两个数据,因此可以使用

访问每个返回数据
ldev_cap, ldev_usdcap = connector_mysql(subSerialNum, ldev, today_date)