问题:我试图从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'对象不可订阅
在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
这里,结果就像字典一样,我可以为键分配一个参数,如:
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()