Python 如何在Postgresql数据库中调用具有特殊字符的字段名?

Python 如何在Postgresql数据库中调用具有特殊字符的字段名?,python,pandas,postgresql,psycopg2,Python,Pandas,Postgresql,Psycopg2,有谁能告诉我如何处理postgres数据库中具有“/”等字符的字段名吗。我的数据库有一个名为CD/CSD的字段(列标题),当我尝试对该字段运行查询时,只会收到错误消息。此外,如果在名称周围加上单引号,则不会收到错误消息,但在运行查询时不会返回任何内容。任何帮助都将不胜感激。下面是我的代码的样子: import pandas as pd import numpy as np import psycopg2 from sqlalchemy import create_engine # databas

有谁能告诉我如何处理postgres数据库中具有“/”等字符的字段名吗。我的数据库有一个名为CD/CSD的字段(列标题),当我尝试对该字段运行查询时,只会收到错误消息。此外,如果在名称周围加上单引号,则不会收到错误消息,但在运行查询时不会返回任何内容。任何帮助都将不胜感激。下面是我的代码的样子:

import pandas as pd
import numpy as np
import psycopg2
from sqlalchemy import create_engine # database connection
engine = create_engine('postgresql://postgres:xxxxx@localhost:xxx/My_Database')
province_selected = raw_input("Type name of province desired: ")
df = pd.read_sql("SELECT * FROM my_table Where CD/CSD=%s", engine, params=(province_selected,))
此外,如果在名称周围加上单引号,则不会收到错误消息,但在运行查询时不会返回任何内容

SQL中的单引号表示字符串。当你说

Where 'CD/CSD'=%s
您的意思是,
%s
从字面上看是6个字符的字符串CD/CSD

我不确定Postgres,但我打赌它遵守引用标识符的SQL标准,这就是列名。也就是说(有点奇怪,但这是SQL),标识符用双引号引起来。这就是Python有三重引号的原因:

df = pd.read_sql('''SELECT * FROM my_table Where "CD/CSD"=%s''', [etc]

非常感谢!这非常有效。我还发现,对语句使用单引号,对标识符使用双引号是有效的。例如,df=pd.read_sql('SELECT*FROM estments_,by_region,其中“CD/CSD”=%s',engine,params=(province_selected,))是的,在该示例中,单引号可以引用sql。还可以使用双引号,并用反斜杠转义嵌入的双引号。但三引号SQL很好,因为您可以对标识符使用双引号,对字符串使用单引号,而不必转义任何内容。