- 50
- 0
问题描述
User表中name和phone_number组成联合主键, Express表中将User表中的联合主键设为外键,然后在Express中添加user的relationship,创建表时没有问题,但是插入一个User,
运行时报错:sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Express.user - there are no foreign keys linking these tables. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.
问题出现的环境背景及自己尝试过哪些方法
查阅了官方文档,自我感觉逻辑和语法都没有问题
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
class User(base):
__tablename__ = 'user'
# id = Column(Integer)
name = Column(String(32), primary_key=True, nullable=False)
phone_number = Column(String(64), primary_key=True, nullable=False)
# express_id = relationship('Express')
class Express(base):
__tablename__ = 'express'
id = Column(Integer, primary_key=True, autoincrement=True)
express_id = Column(String(64), nullable=False)
user_phone = Column(String(64))
user_name = Column(String(64))
ForeignKeyConstraint(('user_name', 'user_phone'), ['user.name', 'user.phone_number'])
user = relationship('User', backref='user_express')
base.metadata.create_all(engine)
你期待的结果是什么?实际看到的错误信息又是什么?
错误信息:
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Express.user - there are no foreign keys linking these tables. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression. - 共 0 条
- 全部回答
-
﹏嚼着口香糖的小女孩 普通会员 1楼
在SQLAlchemy中,如果创建一对多关系报错,可能是由于以下几个原因:
-
你可能尝试连接到一个不存在的表或列。确保你的SQL查询指向的表或列确实存在。
-
如果你的模型中包含多个属性,可能需要在创建模型时指定它们。例如,如果你有一个名为
order的模型,你可能需要在创建它时提供status属性:
python class Order(Base): id = Column(Integer, primary_key=True) status = Column(String(100), unique=True)- 如果你的模型中包含SQLAlchemy的字段,可能需要在模型类的初始化方法中使用
init_db函数。这个函数可以用来创建数据库连接:
python class Order(Base): init_db = db.create_engine('sqlite:///orders.db')- 如果你的模型中包含复杂的SQL查询,可能需要使用
with statement来执行这些查询。这样可以避免SQL注入攻击:
python with db.connect() as connection: order = Order(id=1, status='order1') order.save()以上都是一些可能的原因和解决方法。如果你还有其他问题,可能需要提供更多的上下文信息。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
