代码之家  ›  专栏  ›  技术社区  ›  Michal FaÅ¡ánek

Postgres无法在Python中获取数据

  •  1
  • Michal FaÅ¡ánek  · 技术社区  · 7 年前

    我正在使用Python psycopg2 模块从Postgres数据库获取数据。

    数据库相当大(数十GB)。

    一切似乎都正常,我正在从提取的数据创建对象。 然而,在创建了约160000个对象之后,我得到了以下错误:

    Error

    我想原因是数据量太大,但我在网上找不到任何解决方案。我不知道是否使用过任何代理,以前从未在此计算机上使用过任何代理,数据库已打开 本地服务器 .

    1 回复  |  直到 7 年前
        1
  •  2
  •   roganjosh    7 年前

    有趣的是,“这是一个本地服务器,所以我对SQL注入不开放”的立场常常会让人们认为字符串插值比参数化查询更容易。在您的情况下,最终会导致:

    '... cookie_id = \'{}\''.format(cookie)
    

    所以你最终得到了一些不太清晰的东西,而且也失败了(尽管我不知道具体的错误是如何发生的)。使用参数化:

    cursor.execute("SELECT user_id, created_at FROM cookies WHERE cookie_id = %s ORDER BY created_at DESC;", (cookie,))
    

    要旨 始终以正确的方式进行 . 注意,有些情况下必须使用字符串插值,例如,对于表名:

    cursor.execute("SELECT * FROM %s", (table_name,)) # Not valid
    cursor.execute("SELECT * FROM {}".format(table_name)) # Valid
    

    在这些情况下,如果其他人可以与代码交互,则需要采取其他预防措施。