2017-05-25 40 views
0

說,我有這樣的SQL表如下命名hotel
如何使一個別名爲列在SQL

id numOfRoom 
1  30 
2  20 
3  40 

我建立與Python的web服務器,所以我用一些接口來獲取我的數據庫。

query = 'select * from hotel where id = 1' 
// connect db 
result = cursor.fetchone() 

現在的result類型是字典,所以我可以這樣做:

print(result['id']) # 1 
print(result['numOfRoom']) #30 

在我的項目,我需要生成一個JSON,並將其發送到前端:

{ 
    "id":result['id'], 
    "numOfRoom":result['numOfRoom'] 
} 

但是,在這種情況下,前端無法獲得正確的密鑰,因爲numOfRoom不適合用戶正確使用。對於用戶來說,他們需要獲得諸如number of rooms之類的東西。

所以,我再生一個JSON:

{ 
    "id":result['id'], 
    "number of rooms":result['numOfRoom'] 
} 

現在前端可以簡單地顯示key:value和用戶是快樂的。

但我認爲這不是一個好主意。因爲如果我更新我的sql表,我有一個觸摸我的後端代碼。是否有可能使在SQL列別名,我馬上讓他們這樣我可以代碼來生成JSON如下:

myjson = generateEmptyJson() 
foreach val in result: 
    myjson.append("val.getAlias()":"val.getValue()") 
+0

你將會得到什麼是數據和表示的分離。這是一件好事。將數據庫的內容暴露給用戶是最糟糕的做法。此外,JSON仍然不是要顯示給用戶的格式。有很多地方你必須給DB之外的數據給予適當的標籤。 –

回答

0

另一種可能性可能是在數據庫中創建一個VIEW。

底層改變表:

create changed_hotel (id int PRIMARY KEY NOT NULL, total_rooms int); 

視圖,以反映您的應用程序正在尋找:

create view my_view as 
select id, total_rooms as numOfRoom from changed_hotel; 

你不得不檢查語法在SQL Server(不是一個我很熟悉與),並確保它可以在視圖上執行DML-並非所有數據庫都可以。

1

您可以指定在SQL語句中的值:

select h.id, h.numOfRoom as [Number of Rooms] 
from hotel 
where id = 1; 

如果更改底層結構,您仍然需要更改SQL。