【问题标题】:Many-Many Relationship in SQL AlchemySQLAlchemy 中的多对多关系
【发布时间】:2013-12-11 02:18:07
【问题描述】:

我在 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)

【问题讨论】:

  • Basedb.Model 之间的区别在于,如果您只是使用 SQLAlchemy,通常会创建自己的 Base。但是,Flask-SQLAlchemy 已经创建了一个 Base 类供您使用,以便它可以了解您的类,甚至对其进行了调整,以便当您使用 User.query 时,您可以获得一些额外的方法(例如 @ 987654333@ 方法)不属于 SQLAlchemy 包的一部分。有关这些方法的更多信息,请参阅 Flask-SQLAlchemy docs

标签: python sqlalchemy


【解决方案1】:

发现我的错误

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
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2019-12-06
    • 2021-06-26
    • 2019-06-22
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多