2013-12-11 2 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')) 

Теперь им новый Колба/SQLAlchemy/Python, так это то, как им пытается добавить к отношениям

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

Однако это дает мне ошибку говоря мои ограничения внешнего ключа, были нарушены. Что я делаю неправильно, мне нужно добавить твиты в таблицу твитов, прежде чем делать это.

также то, что является разностное между

class ClassName(db.Model) 

и

class ClassName(Base) 
+0

Разница между '' Base' и db.Model' является то, что вам, как правило, создайте свою собственную базу, если вы просто используете SQLAlchemy. Тем не менее, 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 
) 
Смежные вопросы