繁体   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