my total lack of knowledge in sql queries biting me hard right now.
in flask-sqlalchemy, how append value column has 1 without replacing 1 present?
i tried db.session.merge(user) , db.session.add(user) both end replacing value in column.
to more precise, users table has column named classes_id used record "id" field of gym classes attended. field needs updated many other classes "id" time goes.
just in case, here models
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"))
and 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)
your models definitions not want. user.classes_id
defines 1 value. right answer depends of requirements. type of relationships must there? many user
many classes
(m:m)? in case create models like:
user_to_classes = table('user_to_classes', base.metadata, column('class_id', integer, foreignkey('class.id')), column('user_id', integer, foreignkey('user.id')) ) class class(base): ... # old wrong code # participants = ... # here right definition participants = relationship( 'user', secondary=user_to_classes, backref='classes') # in user class should not write foreign keys , relations. # there `classes` field defined in backref of `class.participants
you can add user class in following manner:
user = ...# code creates or selects user class_ = ...# code creates or selects class # here addition class_.participants.append(user) session.commit()
look @ sqlalchemy docs relationships.