我最近使用了[医]二乳精
当我试图针对生成的代码运行时,它会得到无法修复的消息:
无法确定关系Workgrp.usrmst上父/子表之间的连接条件-有多个外键路径链接这些表。指定'foreign_keys‘参数,提供那些列的列表,这些列应该被计算为包含对父表的外键引用。
我想知道是否有人能给我一些启示:
以下是导致此问题的相关表的生成代码:
class Workgrp(Owner):
__tablename__ = 'workgrp'
workgrp_id = Column(ForeignKey('owner.owner_id'), primary_key=True)
workgrp_prntid = Column(Numeric(scale=0, asdecimal=False))
workgrp_name = Column(String(256))
workgrp_desc = Column(String(4000))
workgrp_owner = Column(ForeignKey('usrmst.usrmst_id'))
workgrp_lstchgtm = Column(DateTime, index=True)
workgrp_externid = Column(String(20))
workgrp_profile = Column(Text)
workgrp_usrmodtm = Column(DateTime)
usrmst = relationship('Usrmst')
class Usrmst(Owner):
__tablename__ = 'usrmst'
__table_args__ = (
Index('usrmst_ak1', 'usrmst_domain', 'usrmst_name'),
)
usrmst_id = Column(ForeignKey('owner.owner_id'), primary_key=True)
usrmst_domain = Column(String(256))
usrmst_name = Column(String(256), nullable=False)
usrmst_fullname = Column(String(1024))
usrmst_desc = Column(String(4000))
usrmst_phoneno = Column(String(40))
usrmst_pagerno = Column(String(40))
usrmst_email = Column(String(1024))
usrmst_emailtype = Column(Numeric(scale=0, asdecimal=False))
secmst_id = Column(ForeignKey('secmst.secmst_id'))
lngmst_id = Column(ForeignKey('lngmst.lngmst_id'))
usrmst_password = Column(String(1024))
usrmst_externid = Column(String(20))
usrmst_suser = Column(String(1))
usrmst_lstchgtm = Column(DateTime, index=True)
usrmst_orapassword = Column(String(144))
usrmst_wingroup = Column(String(1))
usrmst_tmpacct = Column(String(1))
usrmst_profile = Column(Text)
usrmst_usrmodtm = Column(DateTime)
usrmst_principal = Column(String(256))
usrmst_keytab = Column(String(4000))
lngmst = relationship('Lngmst')
secmst = relationship('Secmst')我看过SQLAlchemy文档,并尝试过
但最后却收到了这样的消息:
下面是一些与DBeaver (基于Explorer类型插件)中的原始表相关的屏幕截图:


我不认为这会有多大的影响,但我正在开发:
我在生成的代码之后添加了一个片段,其中包含了相关的导入。
engine = create_engine("oracle://<dbuser>:<dbpwd>@<host>:<port>/<db>")
Session = sessionmaker(bind=engine)
session = Session()
firstjm = session.query(Jobmst).first()
print(firstjm)关于sqlacodegen生成的代码的其他烦人之处:
发布于 2018-02-07 19:43:47
最后,我在Google的高级搜索中找到了语法糖这个确切的词:
usrmst = relationship('Usrmst', foreign_keys=[workgrp_owner])我还为基类重写了__repr__的默认实现,该实现由:
Base = declarative_base()
对此:
import json
def tablerepr(self):
return "<{}: ({})>".format(self.__table__,
json.dumps(
dict(
list(
self.__dict__.items()
)[1:]
), default=str)
)
Base.__repr__ = tablerepr在处理SQLAlchemy发出的对象时,我发现了一些有用的链接:
因此,我最后将tablerepr方法添加到我生成的主要代码中。
然后,在一个单独的python脚本中,我用我的微调导入生成的代码,并有如下代码:
engine = create_engine("oracle://<user>:<password>@<host>:<port>/<db>")
inspector = inspect(engine)
Session = sessionmaker(bind=engine)
session = Session()
print(session.query(Jobmst).first())Jobmst是一个类,表示我导入的表。这表示打印生成的某种内容,客户数据由.取代。表名,然后是包含每个列名及其作为键/值对的数据的元组:
<jobmst: ({"jobmst_id": 1590.0, "jobmst_alias": "1590", "jobmst_owner": 67.0, "jobmst_type": 1.0, "jobmst_dirty": "0", "jobmst_desc": null, "jobmst_vars": null, "jobmst_prntid": 1589.0, "jobmst_crttm": "2001-06-18 10:38:19", "jobmst_active": "N", "jobmst_usrmodtm": "2001-06-29 20:27:06", "jobdtl_id": 1591.0, "evntmst_id": null, "bizunit_id": null, "jobmst_lstchgtm": "2001-06-29 20:27:06", "jobmst_evntoffset": null, "jobmst_desc_type": null, "jobmst_runbook": null, "jobmst_name": "....", "jobmst_runbook_type": null, "jobcls_id": 32.0, "jobmst_mode": null, "jobmst_prntname": "...."})>https://stackoverflow.com/questions/48666026
复制相似问题