SQLAlchemy中的许多关系

时间:2013-12-11 02:18:08

标签: python sqlalchemy

我在SQLAlchemy中定义了多对多的关系

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

现在我是Flask / 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)

1 个答案:

答案 0 :(得分: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
)