我正在尝试从我的sql server访问一些json数据

时间:2017-08-09 04:33:05

标签: python mysql json

请注意,我是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

3 个答案:

答案 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']