[英]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.