【问题标题】:How to make an alias for a column in SQL如何为 SQL 中的列创建别名
【发布时间】:2017-05-25 01:21:24
【问题描述】:

说我有这样一个名为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()")

【问题讨论】:

  • 您将拥有的是数据和表示的分离。那是一件好事。仅仅将数据库的内容暴露给用户是最糟糕的做法。此外,JSON 仍然不是向用户显示的格式。在很多地方,您必须为数据库之外的数据打上适当的标签。

标签: python sql-server json


【解决方案1】:

可以在 SQL 语句中赋值:

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

如果您更改底层结构,您仍然需要更改 SQL。

【讨论】:

    【解决方案2】:

    另一种可能性是在您的数据库中创建一个视图。

    基础更改表:

    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 - 并非所有数据库都可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多