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',))
在 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',))