0
我在SQL查询方面完全缺乏知识,现在正困扰着我。Flask-SQLAlchemy - 如何将值附加到列?
在flask-Sqlalchemy中,如何将一个值附加到已经有一个值的列而不替换已经存在的值?
我试过db.session.merge(用户)和db.session.add(用户),但最终都替换了列中的值。
更确切地说,Users表中有一个名为classes_id的列,用于记录他出席的健身课程的“id”字段。因此,随着时间的推移,该字段需要更新许多其他类“id”。
以防万一,这里的模型
class Classes(db.Model):
__tablename__= 'classes'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
date = db.Column(db.DateTime)
participants = db.relationship('User', backref='classes', lazy='dynamic')
status = db.Column(db.Integer) #1 = open, 0 = closed
class User(UserMixin,db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
email = db.Column(db.String(64),unique=True,index=True)
firstname = db.Column(db.String(64))
lastname = db.Column(db.String(64))
fullname = db.Column(db.String(64))
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
password_hash = db.Column(db.String(128))
member_since = db.Column(db.DateTime(), default=datetime.utcnow)
last_seen = db.Column(db.DateTime(), default=datetime.utcnow)
notes = db.Column(db.Text())
classes_id = db.Column(db.Integer, db.ForeignKey("classes.id"))
而views.py
@main.route('/add_attendees/<int:class_id>',methods=['GET','POST'])
@login_required
def add_attendees(class_id):
form = Find_member()
if form.validate_on_submit():
fullname = form.member_name.data
find_username = fullname.find('-')
username = fullname[find_username + 2:]
user = User.query.filter_by(username=username).first()
user.classes_id = class_id
db.session.merge(user)
db.session.commit()
return redirect(url_for('.add_attendees',class_id = class_id))
return render_template('members_list.html',form=form)
非常感谢。你把我放在正确的轨道上。我配置了多对多的关系,并使用.append就像你所描述的那样,现在它工作起来非常棒!(因为我使用的是flask-sqlalchemy,所以我不得不修改代码,但现在我知道在哪些部分doc看看!) 另一张桌子是创建的,持有classe.id和user.id,我现在可以查询谁去哪个班级等。2竖起大拇指! – Kinwolf
不客气。看来,这个问题不是特定于SQLAlchemy或瓶子。它指的是常见的关系数据库理论。 –