2017-10-10 12 views
0

質問:SQL ServerのあるテーブルからPostgresqlの別のテーブルにデータを移動しようとしています。 ETLプロセスは次のようになります。Python: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 

をtest1のようPostgresqlのにデータを転送した後、私はそれから照会しようとしたとき、私は列が存在しないというエラーを取得します。実行するクエリの二重引用符で囲んだ列名を指定する必要があるようです。これを回避する方法はありますか?

エラーは次のようになります。

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'] 
+0

おそらく引用符が文字列の一部として読み取られていますか?あなたのetlで見積もりを探して削除しますか? –

+0

印刷(df.columns)を実行すると、二重引用符は –

+0

と表示されず、df.loc [0、 'column']を実行すると表示されますか? df.loc [0、 '"coloumn"']を実行する必要がありますか? –

答えて

0

あなたが「LoanAgreementID」列名を二重引用符に必要なのです。 CREATE TABLEステートメントはおそらく(おそらく、フレームワークを使用してスキーマを生成した場合)、その場合は、期待通りにLoanAgreementIDという列があります。ただし、クエリの引用符で囲まれていない名前は自動的に小文字にされ、実際にはloanagreementidという名前の列を検索します。 Postgresは引用符で囲まれていなければオブジェクト名について大文字小文字を区別しますので、見つけられません。

二重引用符で照会するとLoanAgreementIDLoanAgreementsの名前を囲むようにしてください。あるいは、それらの名前をデータベースのsnake_caseに変更することもできます(Postgresの方が寛容で、他の場所ではそうではありません)。それはあなた次第です。

関連する問題