【问题标题】:How to trim output from a sql query in python?如何在python中修剪sql查询的输出?
【发布时间】:2019-12-30 08:20:17
【问题描述】:

我正在运行 sql 查询,从中生成输出并保存到 csv 文件中。

我想修剪 sql 查询的输出。

SQL 查询:

"select trim(CONCAT_WS('|','Master Job Name','Seq','TableName','Source File Name Lnd','landingdfname','TargetPath','query1','Execution Sequence')) FROM DUAL"

代码:

with db.cursor() as cur:
    query_meta = ("select trim(CONCAT_WS('|','Master Job Name','Seq','TableName','Source File Name Lnd','landingdfname','TargetPath','query1','Execution Sequence')) FROM DUAL")
    res = cur.execute(query_meta)
    res = cur.fetchall()

获取输出:

[{u"trim(CONCAT_WS('|','Master Job Name','Seq','TableName','Source File Name Lnd','landingdfname','TargetPath','query1','Execution Sequence'))": 'Master Job Name|Seq|TableName|Source File Name Lnd|landingdfname|TargetPath|query1|Execution Sequence'}]

期望的输出:

Master Job Name|Seq|TableName|Source File Name Lnd|landingdfname|TargetPath|query1|Execution Sequence

【问题讨论】:

  • 嘿,你能分享一下这个输出吗:query_meta = "select trim(CONCAT_WS('|','Master Job Name','Seq','TableName','Source File Name Lnd', 'landingdfname','TargetPath','query1','Execution Sequence')) FROM DUAL”。不要在它周围使用 ()
  • "{u""trim(CONCAT_WS('|','Master Job Name','Seq','TableName','Source File Name Lnd','landingdfname','TargetPath', 'query1','执行序列'))"": '主作业名|Seq|表名|源文件名Lnd|landingdfname|TargetPath|query1|执行序列'}"
  • 结果和你这里粘贴的完全一样吗

标签: python mysql sql dataframe


【解决方案1】:

您可以通过在 select 语句中添加 as 来稍微清理一下结果。

select trim(
  CONCAT_WS(
    '|', 'Master Job Name', 'Seq', 'TableName', 'Source File Name Lnd',
    'landingdfname', 'TargetPath', 'query1', 'Execution Sequence'
  )
) as data FROM DUAL

如果您使用fetchall(),您的结果将始终是一个列表。我假设这个查询可能有多个结果。

# Your code
with db.cursor() as cur:
    query_meta = ("select trim(CONCAT_WS('|','Master Job Name','Seq','TableName','Source File Name Lnd','landingdfname','TargetPath','query1','Execution Sequence')) FROM DUAL")
    res = cur.execute(query_meta)
    res = cur.fetchall()

# Answer
with db.cursor() as cur:
    query_meta = (
        "select trim(CONCAT_WS("
        "'|','Master Job Name','Seq','TableName','Source File Name Lnd',"
        "'landingdfname','TargetPath','query1','Execution Sequence'"
        ")) as data FROM DUAL")
    res = cur.execute(query_meta)
    res = cur.fetchall()

results = [r["data"] for r in res]

for r in results:
    print(r)

【讨论】:

  • 我正在对这个查询做同样的事情,但出现了一些错误。你能帮帮我吗?
  • 查询:“SELECT trim(CONCAT_WS('|',mtd.Master_Job_Name,mtd.Seq,mtd.Table_Name,mtd.Source_mtd.File_Name_mtd.Lnd,landingdfname,mtd.Target_Path,mtd.query, mtd.Execution_Sequence )) as data1 from imedical_master_metadata mtd inner join imedical_master_metadata_query mtq on (mtd.Master_Job_Name=mtq.Master_Job_Name) where mtd.Is_Active='Y' order by mtd.Execution_Sequence"
  • ERROR : pymysql.err.ProgrammingError: (1064, u"您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 '.Lnd 附近使用的正确语法,landingdfname,mtd.Target_Path,mtd.query,mtd.Execution_Sequence )) as new fr' at line 1")
  • 我在上述查询中作为 data1 行出现错误。
  • CONCAT_WS() 中,表达式周围没有引号。他们似乎是需要的。在我添加它们之前,我遇到了语法错误。
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多