【问题标题】:How to get column names and data types from an SQL query without creating view如何在不创建视图的情况下从 SQL 查询中获取列名和数据类型
【发布时间】:2021-10-09 05:41:09
【问题描述】:

我在 Python/Django 应用程序中面临挑战。 谁能帮我从自定义 sql 查询中找到列名及其数据类型。

示例查询:

SELECT Customers.CustomerName, Customers.Address, Orders.OrderID,  Orders.OrderAmount
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

我需要的结果如下:-

{"CustomerName":"Varchar","Address":"Text","OrderID":"Int","OrderAmount":"Decimal"}

【问题讨论】:

  • 一般来说数据类型的定义是不可能的。数据类型可能会有所不同(尤其是当输出列值是作为查询参数提供的文字时)。因此,调查返回的行源的结构。

标签: python mysql sql django airflow


【解决方案1】:

这是一个基于您预期结果的示例:

我有两张桌子:

1. CREATE TABLE `Alpha` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

2. CREATE TABLE `Beta` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `alphaId` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `Alpha_ibfk_1` (`alphaId`),
  CONSTRAINT `Alpha_ibfk_1` FOREIGN KEY (`alphaId`) REFERENCES `Beta` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

我的数据库名称是gesti

如果我使用以下查询:

SELECT CONCAT('{', final_result, '}') AS result_01 FROM
(
SELECT GROUP_CONCAT('"', my_json, '"' SEPARATOR ',') AS final_result FROM
(
  SELECT 
    CONCAT_WS
    (
      '":"',    
     column_name,
      data_type 
    ) AS my_json
  FROM information_schema.columns  where table_schema = 'gesti' and table_name in ('Alpha','Beta') 
) AS json01
) AS final_json;

结果是:

【讨论】:

  • 没有。我需要从 SQL 查询中获取列名及其数据类型。我没有表名。用户将提供自定义查询。我想从该查询结果中获取列名。
  • 您是否尝试删除条件 table_name?
  • @CYRIL 我根据您的预期结果更新了我的帖子。请告诉我它是否对您有帮助,如果它没有忘记点赞并标记为已接受,以便其他人也可以学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多