我在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()
任何帮助或帮助都会被大量批评......
干杯 格雷厄姆
答案 0 :(得分:0)
首先,你应该熟悉编写python代码的Python style guide。
根据您现有的代码,result1
将返回包含(ldev_cap, ldef_usdcap)
值的元组(它不是目录)。您可以result1[0]
访问返回结果,该结果对应于ldev_cap
或result1[1]
的返回值,该返回值对应于ldev_usdcap
的返回值。
或者,由于您要返回两个数据,因此可以使用
访问每个返回数据ldev_cap, ldev_usdcap = connector_mysql(subSerialNum, ldev, today_date)