Python 带有文本字符串的 Postgresql 查询

Python Postgresql query with text string

在 PgAdmin 中,我可以成功执行以下查询:

select * from "Faces" where "Face_Name" = 'Alex'

但是,当我尝试在 python 中执行完全相同的查询时,我遇到了无穷无尽的语法错误。 我正在尝试这样写行:

cursor.execute('SELECT * from "Faces" where ("Face_Name" = 'Alex')

我理解 table 和列名需要用双引号引起来,整个查询需要用单引号引起来。我正在搜索的字符串(在本例中为 'Alex')似乎也需要用单引号引起来。

如何将所有这些放在一行中?

假设您 确实 需要转义 table 和列名,您可以使用双引号。在这种情况下,只需转义 Python SQL 字符串中的双引号:

sql = "SELECT * FROM \"Faces\" WHERE \"Face_Name\" = 'Alex'"
cursor.execute(sql)

这里有两个问题:

  • 正如其他人已经写的那样,您需要注意不要混淆 Python 和 SQL 引号;根据字段名称,您可能需要在查询中同时包含这两个字段,并且要么转义其中一个,要么使用 """ 作为 Python 字符串。
  • 如果名称“Alex”来自 Python 中的变量而不是常量,您应该使用占位符并单独传递它。这将有助于避免安全问题 (SQL Injection),并且是了解在这种特殊情况下是否需要它的好习惯。

将这些放在一起,查询应该是:

cursor.execute('SELECT * from "Faces" where "Face_Name" = %s', ('Alex',))