我不确定之前是否曾问过这个问题,但我找不到任何东西。
当我从前端CURL到后端时,我在base64中传递一个包含SQL查询的JSON对象:
base64(SELECT * FROM mytable) -> U0VMRUNUICogRlJPTSBteXRhYmxl
[{
'sql' : 'U0VMRUNUICogRlJPTSBteXRhYmxl'
}]
后端接收它,然后通过sqlite3数据库运行该查询。它返回数据并将其放入JSON对象:
[{
'column 1' : 'row 1 - data',
'column 2' : 'row 1 - data',
'column 3' : 'row 1 - data',
},{
'column 1' : 'row 2 - data',
'column 2' : 'row 2 - data',
'column 3' : 'row 2 - data',
},{
'column 1' : 'row 3 - data',
'column 2' : 'row 3 - data',
'column 3' : 'row 3 - data',
}]
然后使用python flask服务器将其返回,我认为使用请求库。
我的问题是返回的JSON对象看起来不像上面的那个,但返回更像:
[{
'column 2' : 'row 1 - data',
'column 3' : 'row 1 - data',
'column 1' : 'row 1 - data',
},{
'column 2' : 'row 2 - data',
'column 3' : 'row 2 - data',
'column 1' : 'row 2 - data',
},{
'column 2' : 'row 3 - data',
'column 3' : 'row 3 - data',
'column 1' : 'row 3 - data',
}]
我不知道为什么。我甚至试图将SELECT语句指定为 选择“第1列”,“第2列”,“第3列”FROM mytable;
但仍然相同。
我可以自己订购,但不仅要查询一张表。
我的CURL代码:
$query = $_POST['query'];
function safeQ($squery){
$denied = ["update","delete","insert","create","alter","drop"];
$squery = strtolower($squery);
foreach($denied as &$deny){
if (strpos($squery, $deny) !== false) {
return false;
}
}
return true;
}
print(getQuery($query));
function getQuery($query){
if (safeQ($query)){
$data->sql = base64_encode($query);
$jsonData = json_encode($data);
$ch = curl_init('https://www.example.com/api/sql_query');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData))
);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $result;
}
}
答案 0 :(得分:0)
回答你的问题为什么,这与我在评论中所说的是一样的;当python存储字典时,它不关心顺序。为什么订单结果如何呢?这需要更复杂的内存分配知识,我目前能够回答,但使用键/值结构的关键不在于条目的顺序。
[{
'column 2' : 'row 1 - data',
'column 3' : 'row 1 - data',
'column 1' : 'row 1 - data',
},{
'column 2' : 'row 2 - data',
'column 3' : 'row 2 - data',
'column 1' : 'row 2 - data',
},{
'column 2' : 'row 3 - data',
'column 3' : 'row 3 - data',
'column 1' : 'row 3 - data',
}]
完全没问题。如果你开始看到这个;
[{
'column 2' : 'row 1 - data',
'column 3' : 'row 1 - data',
'column 1' : 'row 1 - data',
},{
'column 2' : 'row 3 - data',
'column 3' : 'row 3 - data',
'column 1' : 'row 3 - data',
},{
'column 2' : 'row 2 - data',
'column 3' : 'row 2 - data',
'column 1' : 'row 2 - data',
}]
这是一个值得关注的案例,因为这次数组类型结构已经脱离原来的顺序。
您可以通过打开解释器来自己做出以下断言
>>> {'a':1,'b':2} == {'b':2,'a':1}
True