Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:为什么PostgreSQL表中的列名用双引号括起来?_Python_Sql_Pandas_Sqlalchemy_Etl - Fatal编程技术网

Python:为什么PostgreSQL表中的列名用双引号括起来?

Python:为什么PostgreSQL表中的列名用双引号括起来?,python,sql,pandas,sqlalchemy,etl,Python,Sql,Pandas,Sqlalchemy,Etl,问题:我正在尝试将数据从SQLServer中的一个表移动到Postgresql中的另一个表。ETL过程如下所示: def transfer_data(): sql = """SELECT TOP(100) * FROM LoanAgreements""" df = pd.read_sql(sql, lms_conn) df.to_sql(PG_TABLE, engine, schema=PG_SCHEMA, if_exists='replace', index=False

问题:我正在尝试将数据从SQLServer中的一个表移动到Postgresql中的另一个表。ETL过程如下所示:

def transfer_data():
    sql = """SELECT TOP(100) * FROM LoanAgreements"""
    df = pd.read_sql(sql, lms_conn)
    df.to_sql(PG_TABLE, engine, schema=PG_SCHEMA, if_exists='replace', index=False)

def get_data():
    sql = """SELECT LoanAgreementID FROM rileys_schema.test1"""
    df = pd.read_sql(sql, engine)
    return df
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) column "loanagreementid" does not exist
LINE 1: SELECT LoanAgreementID FROM rileys_schema.test1
               ^
 [SQL: 'SELECT LoanAgreementID FROM rileys_schema.test1']
在将数据作为test1传输到Postgresql之后,当我尝试从中查询时,我得到一个错误,表示该列不存在。似乎我必须为要执行的查询指定用双引号括起来的列名。有办法解决这个问题吗

错误如下所示:

def transfer_data():
    sql = """SELECT TOP(100) * FROM LoanAgreements"""
    df = pd.read_sql(sql, lms_conn)
    df.to_sql(PG_TABLE, engine, schema=PG_SCHEMA, if_exists='replace', index=False)

def get_data():
    sql = """SELECT LoanAgreementID FROM rileys_schema.test1"""
    df = pd.read_sql(sql, engine)
    return df
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) column "loanagreementid" does not exist
LINE 1: SELECT LoanAgreementID FROM rileys_schema.test1
               ^
 [SQL: 'SELECT LoanAgreementID FROM rileys_schema.test1']

您确实需要在“LoanAgreementID”列名称中加上双引号。您的
createtable
语句可能会这样做(特别是如果您使用框架生成了模式),因此在这种情况下,您将拥有一个
LoanAgreementID
列。但是,查询中不带引号的名称会自动小写,因此您实际上是在搜索名为
loanagreementid
的列。Postgres对对象名是区分大小写的,除非它们被引用,所以它找不到


将查询中的
LoanAgreementID
LoanAgreements
名称用双引号括起来,它们应该可以工作。或者,您可以在数据库中将这些名称更改为snake_大小写(对于Postgres更为惯用,其他地方可能不那么惯用);这取决于你。

也许引号是字符串的一部分?让您的etl查找引号并删除它们?当您进行打印(df.columns)时,不会出现双引号,而当您进行df.loc[0,'column']时?它是否要求您执行df.loc[0'“column”']否。我认为这是一个SQL问题。使用熊猫时,列名是正常的。您能提供一个列表吗?