首页 > 解决方案 > 执行不返回任何内容的查询时会创建什么样的表?

问题描述

我正在使用 petl 并尝试使用查询中的值创建一个简单的表。我写了以下内容:

@staticmethod
def get_base_price(date):
    # open connection to db
    # run SQL query to check if price exists for that date
    # set base price to that value if it exists
    # set it to 100 if it doesn't
    sql = '''SELECT [TimeSeriesValue]
        FROM [RAP].[dbo].[TimeSeriesPosition]
        WHERE TimeSeriesTypeID = 12
        AND SecurityMasterID = 45889
        AND FundID = 7
        AND EffectiveDate = %s''' % date
    with self.job.rap.connect() as conn:
        data = etl.fromdb(conn, sql).cache()
    return data

我正在连接到数据库,如果该日期有值,那么我将能够创建一个如下所示的表:

+-----------------+
| TimeSeriesValue |
+=================+
|     100         |
+-----------------+

但是,如果查询不返回任何内容,那么表会是什么样子?如果查询不返回任何内容,我想将 TimeSeriesValue 设置为 100。不知道该怎么做。

标签: pythonsqletl

解决方案


您应该在执行语句时传递参数,而不是修改字符串。. 但这不是您问题的核心。

可能最简单的解决方案是在 SQL 中完成所有工作。如果您期望查询中最多有一行,则:

SELECT COALESCE(TimeSeriesValue, 100) as TimeSeriesValue
FROM [RAP].[dbo].[TimeSeriesPosition]
WHERE TimeSeriesTypeID = 12 AND
      SecurityMasterID = 45889 AND
      FundID = 7 AND
      EffectiveDate = %s

这将始终返回一行,如果没有找到,它将放入该100值。


推荐阅读