Python Flask, SQLAlchemy relationship

flask, flask-sqlalchemy, python, sqlalchemy

Solution

The way I fixed it was simple, I added

__tablename__ = "paste_code"

and everything worked as it should, I think SQLAlchemy wasn't checking the table name properly.

Problem

I've been trying to fix this problems for a few hours already, I cannot manage to get SQLAlchemy working (it was working untill I put the two new functions, User and Registration) ``` from flask.ext.sqlalchemy import SQLAlchemy from . import app from datetime import datetime db = SQLAlchemy(app) class PasteCode(db.Model): id = db.Column(db.Integer, primary_key = True) codetitle = db.Column(db.String(60), unique = True) codebody = db.Column(db.Text) pub_date = db.Column(db.DateTime) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) parent_id = db.Column(db.Integer, db.ForeignKey('paste_code.id')) parent = db.relationship('PasteCode', lazy = True, backref = 'children', uselist = False, remote_side = [id]) def __init__(self, codetitle, codebody, parent = None): self.codetitle = codetitle self.codebody = codebody self.pub_date = datetime.utcnow() self.parent = parent class User(db.Model): id = db.Column(db.Integer, primary_key = True) display_name = db.Column(db.String(30)) #pastes = db.Column(db.Integer, db.ForeignKey('paste_code.id')) pastes = db.relationship(PasteCode, lazy = "dynamic", backref = "user") class Registration(db.Model): id = db.Column(db.Integer, primary_key = True) username = db.Column(db.String(30), unique = True) password = db.Column(db.String(100), unique = False) ``` This is the traceback it gives me when running: ``` OperationalError: (OperationalError) no such table: paste_code u'SELECT paste_code.id AS paste_code_id, paste_code.codetitle AS paste_code_codetitle, paste_code.codebody AS paste_code_codebody, paste_code.pub_date AS paste_code_pub_date, paste_code.user_id AS paste_code_user_id, paste_code.parent_id AS paste_code_parent_id \nFROM paste_code' () ``` I also tried this: ``` from flask.ext.sqlalchemy import SQLAlchemy from . import app from datetime import datetime db = SQLAlchemy(app) class PasteCode(db.Model): id = db.Column(db.Integer, primary_key = True) codetitle = db.Column(db.String(60), unique = True) codebody = db.Column(db.Text) pub_date = db.Column(db.DateTime) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) parent_id = db.Column(db.Integer, db.ForeignKey('pastecode.id')) parent = db.relationship('PasteCode', lazy = True, backref = 'children', uselist = False, remote_side = [id]) def __init__(self, codetitle, codebody, parent = None): self.codetitle = codetitle self.codebody = codebody self.pub_date = datetime.utcnow() self.parent = parent class User(db.Model): id = db.Column(db.Integer, primary_key = True) display_name = db.Column(db.String(30)) pastes = db.relationship(PasteCode, lazy = 'dynamic', backref = 'user') #pastes = db.relationship(PasteCode, lazy = "dynamic", backref = "user") class Registration(db.Model): id = db.Column(db.Integer, primary_key = True) username = db.Column(db.String(30), unique = True) password = db.Column(db.String(100), unique = False) ``` And I got this error: ``` ArgumentError: Could not determine join condition between parent/child tables on relationship PasteCode.parent. Specify a 'primaryjoin' expression. If 'secondary' is present, 'secondaryjoin' is needed as well. ``` Any idea? Thank you!

Original source