簡體   English   中英

SQLalchemy select 來自 postgresql 表

[英]SQLalchemy select from postgresql table

我有這個 model

import os

from dotenv import load_dotenv
from sqlalchemy import Column, Date, Float, Integer, String,Numeric
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import declarative_base, Session


 Base = declarative_base()

class MS(Base):
 
try:
  
    __tablename__ = 'ms'
    column_not_exist_in_db = Column(Integer, primary_key=True)
    PROVIDER = Column(String)      
except SQLAlchemyError as e:
    error = str(e.__dict__['orig'])
    raise error

這個查詢

import pandas as pd
import sqlalchemy
from sqlalchemy import select,func,distinct
from sqlalchemy.orm import Session
from sqlalchemy.sql import func as sql_function
from sqlalchemy.exc import SQLAlchemyError

from db.models.market_share_postgresql import MS

def run_stmt(stmt,引擎):df = pd.DataFrame()

try:
    
    session = Session(engine, future=True)
    data = session.execute(stmt)
   
    df = pd.DataFrame(data.all())
    if len(df) > 0:
        df.columns = data.keys()
    else:
        columns = data.keys()
        df = pd.DataFrame(columns=columns)
    df= df.rename(columns=str.lower)
except SQLAlchemyError as e:
    error = str(e.__dict__['orig'])
  
    session.rollback()
    raise error
else:

    session.commit()
finally:
    
    engine.dispose()
    session.close()

return df


def ms_providers(engine):

df = pd.DataFrame()

try:
    
   
    stmt = select(
                
       distinct( MS.PROVIDER).label("PROVIDER")
        
    )
 
    df=run_stmt(stmt,engine)
except SQLAlchemyError as e:
    error = str(e.__dict__['orig'])
    raise error
return df

這個引擎:

dbschema='schema1,public' 
    ConnectionString="postgresql+psycopg2://"+POSTGRESQL_USER+":"+POSTGRESQL_PASSWORD+"@"+POSTGRESQL_ACCOUNT+":"+POSTGRESQL_PORT+"/"+POSTGRESQL_DATABASE
    print(ConnectionString)
    engine = create_engine(ConnectionString,connect_args={'options': '-csearch_path={}'.format(dbschema)})  

但運行查詢后,出現此錯誤:psycopg2.errors.UndefinedTable:關系“database1.schema1.ms”不存在第 2 行:來自“database1.schema1”.ms

databse1、schema1 和 ms 表存在,但似乎 sqlalchemy 將"放在錯誤的位置,如錯誤所示: [SQL: SELECT DISTINCT "databse1.schema1".ms."PROVIDER" AS "PROVIDER" FROM "databse1.schema1".小姐]

我怎樣才能解決這個問題?

問題是 PostgreSQL 是區分大小寫的,而數據 model 使用的是表中一列的大寫拼寫,該列全部為小寫(在我的例子中)

如此固定它

 PROVIDER = Column("provider",String)    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM