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

时间:2019-02-21 22:34:57

标签: python pandas postgresql psycopg2

任何人都可以建议我如何处理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,))

1 个答案:

答案 0 :(得分:0)

  

此外,如果我在名称两边加上单引号,我不会收到错误消息,但是运行查询时不会返回任何内容。

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

Where 'CD/CSD'=%s

您的意思是%s实际上是6个字符的字符串 CD / CSD

我不确定Postgres,但是我敢打赌它会引用SQL标准引用 identifier ,这就是列名。即(有点奇怪,但这是SQL),标识符用双引号引起来。而且,是的,这就是Python使用三重引号的原因:

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