2012-06-09 3 views
4

Я пытался исправить эти проблемы в течение нескольких часов уже, я не могу управлять, чтобы получить SQLAlchemy работать (он работал до тех пор пока я поставил две новых функции, пользовательские и регистрацию)Python Колба, SQLAlchemy отношение

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) 

Это отслеживающий это дает мне при работе:

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'() 

Я также попытался это:

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) 

И я получил эту ошибку:

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. 

Любая идея? Спасибо!

+0

Закрыть · Пошлите пополнить счет –

+0

Положительно, спасибо Taos! –

+0

Опубликуйте решение как ответ, чтобы он помогал другим с этой проблемой. –

ответ

5

Путь я исправил это было просто, я добавил

__tablename__ = "paste_code" 

и все работало как надо, я думаю, SQLAlchemy не проверял имя таблицы.

+2

Чтобы добавить к этому, вы всегда должны включать '__tablename__', потому что SQLAlchemy не всегда будет принимать те же решения, которые вам нужны, или ваша СУБД, или ожидать. Например. Oracle имеет максимальную длину имени таблицы 30, тогда как Postgres длиннее. Ожидаете ли вы, что CamelCase станет camel_case или camelcase или CamelCase? Вы можете автоматизировать его для вашего конкретного случая, но гораздо более четко определить его. – Doobeh

+0

Да, я несколько раз сталкивался с этой проблемой. Почему Flask-SQL «помогает», скрывая это? Лучше явно определить. – jwogrady

Смежные вопросы