【问题标题】:Debugging: SQL inside Python Psycopg2调试:Python Psycopg2 中的 SQL
【发布时间】:2017-12-14 12:30:58
【问题描述】:
sql = "WITH users AS(SELECT * FROM stats.core_users cu LEFT JOIN XXXX.sent_hidden_users h USING(user_id)\
    WHERE cu.status = 'hidden' AND h.user_id is null AND cu.country_code = 86 LIMIT 100)\
SELECT\
    cu.user_id,\
    CASE WHEN cu.gender = 'male' THEN 0 ELSE 1 END AS gender,\
    CASE WHEN cu.looking_for_gender = cu.gender THEN 2 WHEN cu.looking_for_gender = 'both' THEN 1 ELSE 0 END AS sexual_orientation,\
    CASE WHEN e2.os_name = 'iOS' THEN 0 ELSE 1 END AS device,\
    ROUND((DATE(NOW()) - cu.birthdate)/365.25) AS user_age,\
    SUM(dsb.likes) AS likes,\
    SUM(dsb.dislikes) AS dislikes,\
    SUM(dsb.blocks) AS blocks,\
    SUM(dsb.matches) AS matches,\ 
    SUM(dsb.received_likes) AS received_likes,\
    SUM(dsb.received_dislikes) AS received_dislikes,\
    SUM(dsb.received_blocks) AS received_blocks,\
    cu.search_radius,\
    cu.search_min_age,\
    cu.search_max_age,\
    '' AS recall_case,\
    '' AS recall_retention\
FROM \
    users cu\
LEFT JOIN \
    yay.daily_swipes_by_users dsb ON (dsb.user_id = cu.user_id) \
LEFT JOIN LATERAL (\
    SELECT \
            cd.os_name \
    FROM \
            stats.core_devices cd \
    WHERE \
            cu.user_id = cd.user_id \
    ORDER BY cd.updated_time DESC LIMIT 1) e2 ON TRUE \
GROUP BY 1,2,3,4,5,13,14,15,16,17\
;"

错误信息:

文件“”,第 5 行 sql = "WITH users AS(SELECT * FROM stats.core_users cu LEFT JOIN zhangqiao.sent_hidden_​​users h USING(user_id) WHERE cu.status = 'hidden' AND h.user_id is null AND cu.country_code = 86 LIMIT 100)SELECT cu. user_id, CASE WHEN cu.gender = 'male' THEN 0 ELSE 1 END AS gender, CASE WHEN cu.looking_for_gender = cu.gender THEN 2 WHEN cu.looking_for_gender = 'both' THEN 1 ELSE 0 END ASsexual_orientation, CASE WHEN e2. os_name = 'iOS' THEN 0 ELSE 1 END AS device, ROUND((DATE(NOW()) - cu.birthdate)/365.25) AS user_age, SUM(dsb.likes) A​​S likes, SUM(dsb.dislikes) A​​S dislikes , SUM(dsb.blocks) AS 块, SUM(dsb.matches) A​​S 匹配,\ ^

SyntaxError:扫描字符串文字时 EOL

【问题讨论】:

  • ProgrammingError: "users" LINE 1 或附近的语法错误: ...l_case, '' AS recall_retentionFROM users cuLE... ---------------这是因为Psycopg2 With Statement

标签: python postgresql debugging psycopg2 string-literals


【解决方案1】:

SUM(dsb.matches) AS matches,\ 中的\ 后面似乎有一个空格。摆脱它。正如目前所写的那样,您正在使用 \ 而不是换行符来转义空间。

您的第二个错误是因为您需要在此行中的\ 之前有一个空格:

'' AS recall_retention\

因为当你写的时候:

    '' AS recall_retention\
FROM \
    users cu\

你得到的结果是:

'' AS recall_retentionFROM users cu

希望那里的错误很明显。与其纠结于所有这些转义,不如使用多行引号('''""")来简化代码,如下所示:

sql = """WITH users AS(SELECT * FROM stats.core_users cu LEFT JOIN XXXX.sent_hidden_users h USING(user_id)
    WHERE cu.status = 'hidden' AND h.user_id is null AND cu.country_code = 86 LIMIT 100)
SELECT
    cu.user_id,
    CASE WHEN cu.gender = 'male' THEN 0 ELSE 1 END AS gender,
    CASE WHEN cu.looking_for_gender = cu.gender THEN 2 WHEN cu.looking_for_gender = 'both' THEN 1 ELSE 0 END AS sexual_orientation,
    CASE WHEN e2.os_name = 'iOS' THEN 0 ELSE 1 END AS device,
    ROUND((DATE(NOW()) - cu.birthdate)/365.25) AS user_age,
    SUM(dsb.likes) AS likes,
    SUM(dsb.dislikes) AS dislikes,
    SUM(dsb.blocks) AS blocks,
    SUM(dsb.matches) AS matches,
    SUM(dsb.received_likes) AS received_likes,
    SUM(dsb.received_dislikes) AS received_dislikes,
    SUM(dsb.received_blocks) AS received_blocks,
    cu.search_radius,
    cu.search_min_age,
    cu.search_max_age,
    '' AS recall_case,
    '' AS recall_retention
FROM
    users cu
LEFT JOIN
    yay.daily_swipes_by_users dsb ON (dsb.user_id = cu.user_id)
LEFT JOIN LATERAL (
    SELECT
            cd.os_name
    FROM
            stats.core_devices cd
    WHERE
            cu.user_id = cd.user_id
    ORDER BY cd.updated_time DESC LIMIT 1) e2 ON TRUE
GROUP BY 1,2,3,4,5,13,14,15,16,17
;"""

【讨论】:

  • ProgrammingError: "users" LINE 1 或附近的语法错误: ...l_case, '' AS recall_retentionFROM users cuLE... ---------------这是因为Psycopg2 With Statement
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2020-05-31
  • 2015-08-06
相关资源
最近更新 更多