Postgresql 如何在没有sqlalchemy ORM关系的情况下连接查询
我已经为此挣扎了很久。我来自php/mysql,其中可以轻松执行以下查询:Postgresql 如何在没有sqlalchemy ORM关系的情况下连接查询,postgresql,sqlalchemy,Postgresql,Sqlalchemy,我已经为此挣扎了很久。我来自php/mysql,其中可以轻松执行以下查询: SELECT Work_center, ... , MRPW, WCC.Total_Cost FROM tracking LEFT JOIN WCC ON WCC.Well_Type_Code = tracking.PDO_Well_Type 但是现在,对于python、postgresql和sqlalchemy,它给了我以下错误: sqlalchemy.exc.ProgrammingError: (psycopg2.
SELECT Work_center, ... , MRPW, WCC.Total_Cost FROM tracking LEFT JOIN WCC ON WCC.Well_Type_Code = tracking.PDO_Well_Type
但是现在,对于python、postgresql和sqlalchemy,它给了我以下错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "wcc" does not exist
LINE 1: ...uit, MRPW, WCC.Total_Cost FROM tracking LEFT JOIN WCC ON WCC...
它问我关系,关系问我外键,但这里没有外键。我不想链接这两个表。虽然我尝试过这样做,但这给了我很多时间,因为这两个表的数据来自csv文件上传。如何使用没有关系和外键的联接进行查询?
知道我花了几个小时的时间搜索和尝试,但似乎不起作用
class WCC(Base):
__tablename__ = "WCC"
__table_args__ = {'extend_existing': True}
id = Column(Integer, primary_key=True, index=True)
Well_Type_Code = Column(String, index=True)
Well_Type_Code_year = Column(String, index=True, unique=True)
Year = Column(Integer)
Total_Cost = Column(Float)
#wells = relationship("tracking", back_populates="WCC",foreign_keys=[Well_Type_Code], primaryjoin="tracking.PDO_Well_Type == WCC.Well_Type_Code")
class tracking(Base):
__tablename__ = "tracking"
__table_args__ = {'extend_existing': True}
id = Column(Integer, primary_key=True, index=True)
Work_center = Column(String)
Operation_Short = Column(String)
Oper_Act = Column(String)
Opr_System_status = Column(String)
Earl_start_date = Column(DateTime)
EarliestEndDate = Column(DateTime)
Station_Code = Column(String)
Normal_duration = Column(Float)
Norm_duratn_un= Column(String)
Well_Name= Column(String)
Field = Column(String)
Responsible_asset = Column(String)
Well_ID = Column(Integer, unique=True, index=True)
Well_Location= Column(String)
Well_Function= Column(String)
Well_Category= Column(String)
PCAP_Category= Column(String)
Move_days= Column(Float)
PDO_Well_Type= Column(String)
pick_date = Column(DateTime)
pick_date_spud = Column(DateTime)
PI_date = Column(DateTime)
PI_date_spud = Column(DateTime)
location = Column(Float)
location_date = Column(DateTime)
location_date_spud = Column(DateTime)
HUA_date = Column(DateTime)
HUA_date_spud = Column(DateTime)
WPT_final_date = Column(DateTime)
WPT_final_date_spud = Column(DateTime)
WPT_highlights = Column(String)
expected_comm_date = Column(DateTime)
commissioning_date = Column(DateTime)
EWS_date = Column(DateTime)
cond_conduit= Column(Text)
gas_conduit= Column(Text)
MRPW= Column(Text)
#cost = relationship("WCC", back_populates="tracking",primaryjoin="tracking.PDO_Well_Type == WCC.Well_Type_Code")
在Postgres中,对象名称在双引号中区分大小写,并且必须始终双引号。表在创建时似乎是双引号的,但在查询中引用时却不是:
class WCC(Base):
__tablename__ = "WCC"
but
LEFT JOIN WCC ON
表名“WCC”与WCC不同。尝试从创建表的位置删除双引号。如果由于您的ORM而无法实现,则对查询本身进行双引号。但是请记住,您必须在每一个参考资料中重复引用。尽可能避免双引号,任何明显的好处都是不值得的。请您将导致错误的查询包括在内?我必须双引号引用所有带有大写字母的表/列名。