2013-12-11 114 views
1

我有許多人)在SQLAlchemy的多對多的SQL鍊金術關係

tweet2user = db.Table('tweet2user', 
db.Column('tweet_id', db.Integer, db.ForeignKey('users.uid')), 
db.Column('user_id', db.Integer, db.ForeignKey('tweets.uid')) 

定義了很多關係

其中鳴叫是

class Tweet(db.Model): 
__tablename__ = 'tweets' 
uid = db.Column(db.Integer, primary_key=True) 
tweet = db.Column(db.String(140)) 
sentiment = db.Column(db.String(100)) 
sentimentValue = db.Column(db.String(20)) 

和用戶相關的部分是

class User(db.Model): 
    tweets = db.relationship('Tweet', secondary=tweet2user, 
     backref=db.backref('tweets', lazy='dynamic')) 

Now im new到瓶/ SQLAlchemy中/ Python的,所以這是IM如何嘗試添加到關係

for item in data: 
    tweetText = item['tweet'] 
    sentiment = item['data']['type'] 
    sentimentValue = item['data']['score'] 
    tweet = Tweet(tweetText,sentiment,str(sentimentValue)) 
    tweets.append(tweet) 


if 'email' not in session: 
    return redirect(url_for('signin')) 
user = User.query.filter_by(email = session['email']).first() 
user.tweets = tweets 
db.session.commit() 

但是這給了我一個錯誤,說我的外鍵約束被侵犯。 我做錯了什麼,我需要添加推文到我的tweets表之前,使這種關係。

還什麼

class ClassName(db.Model) 

class ClassName(Base) 
+0

Base'和'db.Model'之間'不同的是,你通常如果你只是使用SQLAlchemy,創建你自己的'Base'。然而,Flask-SQLAlchemy已經創建了一個'Base'類供您使用,以便它可以知道您的類,甚至調整了它,以便在使用User.query時可以獲得一些額外的方法(例如'get_or_404'方法)不屬於SQLAlchemy包。有關這些方法的更多信息,請參見Flask-SQLAlchemy [docs](http://pythonhosted.org/Flask-SQLAlchemy/api.html#models)。 –

回答

0

差異性之探源發現我的錯誤

tweet2user = db.Table('tweet2user', 
db.Column('tweet_id', db.Integer, db.ForeignKey('users.uid')) <<<...matching to wrong table haha, 
db.Column('user_id', db.Integer, db.ForeignKey('tweets.uid')) <<<...same here 
)