gpt4 book ai didi

python - 定义没有外键的关系

转载 作者:太空狗 更新时间:2023-10-29 22:00:04 27 4
gpt4 key购买 nike

如何在没有外键的情况下建立关系?

@declared_attr 
def custom_stuff(cls):
joinstr = 'foreign(Custom.name) == "{name}"'.format(name=cls.__name__)
return db.relationship('Custom', primaryjoin=joinstr)

这引发了一个错误:
ArgumentError:无法找到任何简单的相等表达式,涉及主要连接条件的本地映射外键列

这行得通,但我认为这是一个非常丑陋的 hack。

@declared_attr
def custom_stuff(cls):
joinstr = 'or_(
and_(foreign(Custom.name) == MyTable.title,
foreign(Custom.name) != MyTable.title),
foreign(Custom.name) == "{name}")'.format(name=cls.__name__)
return db.relationship('Custom', primaryjoin=joinstr)

有更好的方法吗?

编辑:额外的属性需要添加为 @declared_attr 并且必须使用关系,因为我们的序列化程序是这样编写的,所以它可以与声明的属性一起工作。

使用 @hybrid_property 或其他方式执行此操作会起作用,但随后我们的 json 序列化器会中断。让它发挥作用似乎比定义关系更难。

最佳答案

在数据库中创建表时,您不必定义关系(这几乎适用于每个 SQL)。您仍然可以连接没有预定义外键关系的表(外键的主要原因是强制数据一致性,而不是定义您可以连接或不连接的内容)。

参见此以供引用 - http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.join

如果您仍然想“显示”数据库和表结构/模型,那么最好使用一些实体关系建模器,如 ERwin(或一些图表软件)。

关于python - 定义没有外键的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30346364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com