gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:30:24 24 4
gpt4 key购买 nike

我刚刚开始使用 PostgreSQL,遇到了一些问题。我正在使用 Psycopg2 并在 AWS RDS 上托管 PostgreSQL 数据库。这是我要执行的查询:

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

fqdn_str 是这样的域名:

https://www.example.com

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

最佳答案

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

我链接的文档甚至有一个很好的说明:

enter image description here

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

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

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

您可能应该使用 = 而不是 IS,但我不确定最后一部分。

所以你的最终代码应该是这样的:

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

关于postgresql - 尝试在 PostgreSQL 10 中选择数据时出现查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54144013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com