【问题标题】:Convert array of JSON objects using python使用python转换JSON对象数组
【发布时间】:2017-09-18 15:32:33
【问题描述】:

我在python中有如下函数,即查询:

这个的输出是一个表格。

def queryNoScan(start_time_prod,date_object,start_time_scan,date_object_scan):
    query_basictable = """
    SELECT t1.Machine, t1.Production, t2.Scanned, (t1.Production-t2.Scanned) as Delta
        FROM
         (SELECT MCH_CODE as Machine, COUNT(CODE) AS Production
                FROM table1
                        WHERE CODE = 'PROD' AND SUBCODE = 'MACH'  
                        AND EVS_START  between '%s'and '%s' and PP_CODE ='A'
                        GROUP BY MCH_CODE) t1 
        INNER JOIN
         (SELECT MCH_CODE as Machine,  COUNT(BARCODE) AS Scanned
                FROM table2
                        WHERE TRC_TIMESTAMP between '%s'and '%s' AND PP_CODE ='A'
                        GROUP BY MCH_CODE) t2 ON t1.Machine=t2.Machine
                        ORDER BY Delta desc
    """ %(start_time_prod,date_object,start_time_scan,date_object_scan)

    scan_data = pd.read_sql(sql=query_basictable, con=engine)

    return scan_data

如何将此函数的输出转换为字符串的 JSON,稍后我将在前端传递它们。 喜欢:“机器”:{“机器2”:14317等

【问题讨论】:

  • 不要使用字符串格式化操作来构建 SQL 查询。
  • 你试过了吗:`return scan_data.to_json()`?
  • 如果@chepner 不清楚,你应该这样做:bobby-tables.com/python.html
  • 你好@JanZeiseweis。非常感谢。我已经使用了你的方法,但现在我得到的结果是这样的: {"Machine":{"0":"Machine","1":"Machine2"}} 。如何获得像机器 1 和机器 2 下的漂亮外观
  • 另外@JanZeiseweis 请按回答问题以便我接受

标签: python sql json


【解决方案1】:

您可以使用 pandas 的 to_json 方法将您的数据框转换为 json 字符串。在文档中,您还可以找到一些有用的示例。

请不要忽略 chepner 的评论,因为他是对的。您不应使用字符串格式化操作来生成 SQL 查询。

改为使用read_sql 方法的params 参数:

def queryNoScan(start_time_prod, date_object, start_time_scan, date_object_scan):
    query_basictable = """
    SELECT t1.Machine, t1.Production, t2.Scanned, (t1.Production-t2.Scanned) as Delta
        FROM
         (SELECT MCH_CODE as Machine, COUNT(CODE) AS Production
                FROM table1
                        WHERE CODE = 'PROD' AND SUBCODE = 'MACH'  
                        AND EVS_START  between %s and %s and PP_CODE ='A'
                        GROUP BY MCH_CODE) t1 
        INNER JOIN
         (SELECT MCH_CODE as Machine,  COUNT(BARCODE) AS Scanned
                FROM table2
                        WHERE TRC_TIMESTAMP between %s and %s AND PP_CODE ='A'
                        GROUP BY MCH_CODE) t2 ON t1.Machine=t2.Machine
                        ORDER BY Delta desc
    """ 
    params = (start_time_prod, date_object, start_time_scan, date_object_scan)

    scan_data = pd.read_sql(sql=query_basictable, con=engine, params=params)

    return scan_data.to_json()

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    相关资源
    最近更新 更多