Join 父/子表之间未定义的联接条件
以下是基本todo应用程序的模型,用户可以在其中创建包含任务的任务列表:Join 父/子表之间未定义的联接条件,join,orm,foreign-key-relationship,flask-sqlalchemy,Join,Orm,Foreign Key Relationship,Flask Sqlalchemy,以下是基本todo应用程序的模型,用户可以在其中创建包含任务的任务列表: from flask.ext.sqlalchemy import SQLAlchemy from allot import db class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String) tasklists = db.relationship('Taskli
from flask.ext.sqlalchemy import SQLAlchemy
from allot import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String)
tasklists = db.relationship('Tasklist', backref='user', lazy='dynamic')
tasks = db.relationship('Task', backref='user', lazy='dynamic')
def __init__(self, username, email):
self.username = username
class Tasklist(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey('User.id'))
tasks = db.relationship('Task', backref='tasklist', lazy='dynamic')
def __init__(self, title, description, user_id):
self.title = title
self.user_id = user_id
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title= db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey('User.id'))
tasklist_id = db.Column(db.Integer, db.ForeignKey('Tasklist.id'))
def __init__ (self, title, status, user_id):
self.title = title
self.user_id = user_id
self.tasklist_id = tasklist_id
它会生成以下错误:
ArgumentError:无法确定父级/子级之间的联接条件
关系User.tasklists上的表。指定“primaryjoin”
表示如果存在“secondary”,则需要“secondary join”
嗯
在关系中添加primaryjoin参数,如下所示:
tasklists = db.relationship('Tasklist', backref='user', primaryjoin='user.id==Tasklist.user_id', lazy='dynamic')
。。。返回:
InvalidRequestError:一个或多个映射程序未能初始化-无法
继续初始化其他映射程序
这个模型怎么了
我在[relationship][1]文档等中搜索了一个解释,但没有结果。一种可能是,当您引用外键时,您使用的是大写用户,而实际上需要使用小写的tablename引用。试试这个:
from flask.ext.sqlalchemy import SQLAlchemy
from allot import db
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String)
tasklists = db.relationship('Tasklist', backref='user', lazy='dynamic')
tasks = db.relationship('Task', backref='user', lazy='joined'))
def __init__(self, username, email):
self.username = username
class Tasklist(db.Model):
__tablename__ = 'tasklist'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
tasks = db.relationship('Task', backref='tasklist', lazy='dynamic')
def __init__(self, title, description, user_id):
self.title = title
self.user_id = user_id
class Task(db.Model):
__tablename__ = 'task'
id = db.Column(db.Integer, primary_key=True)
title= db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
tasklist_id = db.Column(db.Integer, db.ForeignKey('tasklist.id'))
def __init__ (self, title, status, user_id):
self.title = title
self.user_id = user_id
self.tasklist_id = tasklist_id