请注意,我是python的新手。 我试图用python从MySQL服务器访问数据。 到目前为止,我已经建立了与服务器的连接并获得了数据,但是当我需要解析数据时就会出现问题。 我得到的错误如下。
TypeError:期望的字符串或缓冲区
#Login-AzureRmAccount
#$sub = Get-AzureRmSubscription | Out-GridView -PassThru | Set-AzureRmContext
$path="dcsppomsstorage.blob.core.windows.net/dcsvmpowerstate/activeserver1.txt"
function SPWservers {
[string]$ResourceGroupName = "*DCS-PP*"
$VMresourcegroups = (Get-AzureRmResourceGroup).Where({$_.ResourceGroupName -like $ResourceGroupName})
foreach($VMresourcegroup in $VMresourcegroups){
$vms=Get-AzureRmVM -ResourceGroupName $VMresourcegroup.ResourceGroupName
foreach ($vm in $vms)
{
$Status = (get-azurermvm -ResourceGroupName $VMresourcegroup.ResourceGroupName -Name $vm.Name -Status).Statuses
Write "powerstate for $($vm.Name) is $($Status[1].DisplayStatus)" | Format-Table $vm.Name, $Status[1].DisplayStatus -GroupBy $vm.name
}
}
}
SPWservers| out-file $path
答案 0 :(得分:0)
json加载 - >从表示json对象的字符串返回一个对象。
json转储 - >返回一个表示来自对象的json对象的字符串。
所以你的json.loads
正在寻找字符串表示。所以你最好做json.dumps然后做json.loads。
这应该解决。
import MySQLdb
import json
if __name__ == "__main__":
conn = create_con()
cur = conn.cursor()
cur.execute("select answer_option from question_answer")
result = cur.fetchone()
x = json.dumps(result)
x = json.loads(result)
答案 1 :(得分:0)
TypeError:期望的字符串或缓冲区清楚地暗示了问题。
您可以print result
验证类型。
-
cursor.fetchone()
此方法检索查询结果集的下一行并返回单个序列,如果没有更多行可用,则返回无。文档参考here
==
json.loads(s)
此方法使用此转换表将包含JSON文档的str或unicode实例反序列化为Python对象。请参阅this
-
所以,我想也许你不需要json.loads ...因为结果已经是一个python对象了。
答案 2 :(得分:0)
默认情况下,Cursor类将行作为元组返回。
cur = conn.cursor()
cur.excute("select answer_option from question_answer")
result = cur.fetchone()
打印(结果)获得("foo", )
您可以这样做以获得结果
x = result[0]
OR
在游标中包含MySQLdb.cursors.DictCursor
以将行作为字典返回。然后您可以按名称访问它们。
cur = conn.cursor(MySQLdb.cursors.DictCursor)
cur.excute("select answer_option from question_answer")
result = cur.fetchone()
打印(结果)获得{"answer_option": "foo"}
您可以像这样访问您的结果:
x = result['answer_option']