【发布时间】: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)
【问题讨论】:
-
Base和db.Model之间的区别在于,如果您只是使用 SQLAlchemy,通常会创建自己的Base。但是,Flask-SQLAlchemy 已经创建了一个Base类供您使用,以便它可以了解您的类,甚至对其进行了调整,以便当您使用User.query时,您可以获得一些额外的方法(例如 @ 987654333@ 方法)不属于 SQLAlchemy 包的一部分。有关这些方法的更多信息,请参阅 Flask-SQLAlchemy docs。
标签: python sqlalchemy