尝试在PostgreSQL 10中选择数据时出现查询错误

2024-07-08 10:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始使用PostgreSQL,有点问题。我正在使用Psycopg2并在awsrds上托管PostgreSQL数据库。下面是我要执行的查询:

cursor.execute('SELECT id FROM fqdn AS domain WHERE domain.fqdn IS {0}'.format(fqdn_str))

fqdn_str是这样一个域名:

^{pr2}$

fqdn表如下:

CREATE TABLE fqdn (
    id SERIAL PRIMARY KEY,
    fqdn TEXT NOT NULL,
    date_last_crawled TIMESTAMP WITH TIME ZONE NOT NULL,
        UNIQUE (fqdn)
);

我得到的错误是:

psycopg2.ProgrammingError: syntax error at or near "https"

我不知道我做错了什么,所以我希望你能帮我一点忙。如果你需要更多的信息,请告诉我。非常感谢。在

编辑:

如果将格式字符串更改为%s(如文档中所示),则会出现以下错误:

TypeError: not all arguments converted during string formatting

Tags: fromid数据库executepostgresqldomain错误not
2条回答

在WHERE子句中更改是by=。在

CREATE TABLE T(ID text);
INSERT INTO T VALUES ('https://www.example.com');
^{pr2}$

ERROR: syntax error at or near "'https://www.example.com'"
LINE 1: SELECT * FROM T WHERE ID IS 'https://www.example.com';

SELECT * FROM T WHERE ID = 'https://www.example.com';
| id                      |
| :            |
| https://www.example.com |

db<;>fiddlehere

正如user@SahapAsci在对该问题的评论中建议的那样,您应该为SQL查询使用参数(阅读docs),以避免SQL注入漏洞。在

我链接的文档甚至有一个很好的注释:

enter image description here

但我怀疑@SahapAsci在他们的评论中建议的代码有一个小错误。用户建议此代码:

cursor.execute(
    'SELECT id FROM fqdn AS domain WHERE domain.fqdn IS %s',
    (fqdn_str)) 

但是我认为您需要在参数元组中添加一个逗号,因为否则它将不是一个元组,而是一个字符串,它将被解释为iterable并且只使用第一个字符(然后抛出您提到的错误:"TypeError: not all arguments converted during string formatting")。我所链接的文档甚至有一个注释,要对这个特定的案例小心。在

你也许应该让我们=而不是{},但我不能完全肯定最后一部分。在

最后的代码应该是这样的:

^{pr2}$

相关问题 更多 >

    热门问题