Postgres无法在Python中获取数据

时间:2018-02-28 21:12:01

标签: python postgresql bigdata psycopg2

我使用Python与 psycopg2 模块从Postgres数据库中获取数据。

数据库非常大(几十GB)。

一切似乎都在起作用,我正在从获取的数据中创建对象。 但是,在创建约160000个对象后,我收到以下错误:

Error

我认为原因是数据量,但我无法在任何地方搜索在线解决方案。我不知道使用任何代理,并且之前从未使用任何代理,数据库位于 localhost

1 个答案:

答案 0 :(得分:2)

有趣的是,“这是一个本地服务器,所以我不接受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

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