SQlAlchemy: Could not determine join condition between parent/child tables on relationship错误信息。

7 浏览
0 Comments

SQlAlchemy: Could not determine join condition between parent/child tables on relationship错误信息。

我最近使用了sqlacodegen。当我尝试运行生成的代码时,却收到了以下无法修复的错误消息:\n无法确定Workgrp.usrmst关系表上的父/子表之间的连接条件 - 存在多个连接此表的外键路径。请指定\'foreign_keys\'参数,提供一个应被视为包含对父表的外键引用的列的列表。\n我想知道是否有人能够帮助解决这个问题:\n以下是导致问题的相关表的生成代码:\nclass Workgrp(Owner):\n __tablename__ = \'workgrp\'\n workgrp_id = Column(ForeignKey(\'owner.owner_id\'), primary_key=True)\n workgrp_prntid = Column(Numeric(scale=0, asdecimal=False))\n workgrp_name = Column(String(256))\n workgrp_desc = Column(String(4000))\n workgrp_owner = Column(ForeignKey(\'usrmst.usrmst_id\'))\n workgrp_lstchgtm = Column(DateTime, index=True)\n workgrp_externid = Column(String(20))\n workgrp_profile = Column(Text)\n workgrp_usrmodtm = Column(DateTime)\n usrmst = relationship(\'Usrmst\')\n \nclass Usrmst(Owner):\n __tablename__ = \'usrmst\'\n __table_args__ = (\n Index(\'usrmst_ak1\', \'usrmst_domain\', \'usrmst_name\'),\n )\n usrmst_id = Column(ForeignKey(\'owner.owner_id\'), primary_key=True)\n usrmst_domain = Column(String(256))\n usrmst_name = Column(String(256), nullable=False)\n usrmst_fullname = Column(String(1024))\n usrmst_desc = Column(String(4000))\n usrmst_phoneno = Column(String(40))\n usrmst_pagerno = Column(String(40))\n usrmst_email = Column(String(1024))\n usrmst_emailtype = Column(Numeric(scale=0, asdecimal=False))\n secmst_id = Column(ForeignKey(\'secmst.secmst_id\'))\n lngmst_id = Column(ForeignKey(\'lngmst.lngmst_id\'))\n usrmst_password = Column(String(1024))\n usrmst_externid = Column(String(20))\n usrmst_suser = Column(String(1))\n usrmst_lstchgtm = Column(DateTime, index=True)\n usrmst_orapassword = Column(String(144))\n usrmst_wingroup = Column(String(1))\n usrmst_tmpacct = Column(String(1))\n usrmst_profile = Column(Text)\n usrmst_usrmodtm = Column(DateTime)\n usrmst_principal = Column(String(256))\n usrmst_keytab = Column(String(4000))\n lngmst = relationship(\'Lngmst\')\n secmst = relationship(\'Secmst\')\n我已经查看了SQLAlchemy文档,并尝试了一些操作,如:\n- foreign_keys\n- primaryjoin\n但是得到了以下错误消息:\n- \'Table\'对象没有属性\'usrmst_id\'\n- \'Table\'对象没有属性\'workgrp_owner\'\n以下是在DBeaver中显示的一些相关原始表的屏幕截图:\n我不认为这会有太大的区别,但我正在开发:\n- Windows Server 2012 RC2\n- 使用Oracle 11g\n- 使用Python 3.6.4\n- sqlacodegen 1.1.6\n在生成的代码之后,我添加了一段相关的导入代码:\nengine = create_engine(\"oracle://:@:/\")\nSession = sessionmaker(bind=engine)\nsession = Session()\nfirstjm = session.query(Jobmst).first()\nprint(firstjm)\nsqlacodegen生成的代码还有一些令人讨厌的问题:\n- 没有生成__repr__和__str__的字符串实现,因此表的打印输出没有通用的列名和列值的键值对列表。\n- 声称是PEP兼容的代码,但行数经常超过字符限制,所以你必须去重新格式化长的比较字符串\'x x\'为\'x\' \' x\'等。

0
0 Comments

SQLAlchemy: Could not determine join condition between parent/child tables on relationship 错误信息的出现原因是无法确定父/子表之间的连接条件。解决方法是在relationship()函数中使用foreign_keys参数指定外键。

在这个问题的解决过程中,作者通过在Google高级搜索中搜索了错误信息的确切术语,并在SQLAlchemy官方文档中找到了相关内容。根据文档中的说明,作者使用了foreign_keys参数来指定外键。此外,作者还重写了Base类的__repr__方法,以便在打印对象时显示更多有用的信息。

在文章的后半部分,作者提供了一些在使用SQLAlchemy时有用的链接,并展示了如何使用生成的代码和自定义的方法来查询数据库。

总结起来,解决这个问题的关键是使用foreign_keys参数指定外键,并且可以通过重写__repr__方法来自定义打印对象时的显示内容。

0