python - Flask SQL Alchemy getting the data from user interface to database with relationship -
i'm new flask , sql alchemy , i'm having difficulties setting relationships among data entered database through simple web input forms.
- background
right now, testing purpose, have 3 tables (classes) named family, individual , sample. 1 family can have multiple individuals, 1 individual can have multiple samples , new sample entry created every new entry of whatever (family, individual , sample). i've created one-to many relationship between family , individual, individual , sample. web ui have 3 input form family name, individual name , sample name.
- problem
so problem i'm having that, i'm not sure how should approach problem when trying set relationship between family individual , individual sample.
so if assume family last name 'jones'(son) exists in database, if 'jones' mom come in web ui, 'jones' mom automatically bound family_name 'jones'.
- what have done
-- test_models
app import db class family(db.model): family_id = db.column(db.integer, primary_key=true, autoincrement=true, index=true) family_name = db.column(db.string(40), nullable=false, index=true, unique=false) family_relationship = db.column(db.string(40), nullable=true) individuals = db.relationship('individual', backref='family', lazy='dynamic') def __init__(self, family_name,family_relationship): self.family_name = family_name self.family_relationship = family_relationship def __repr__(self): return "<family %s %s>" % (self.family_name, self.family_relationship) class individual(db.model): individual_id = db.column(db.integer, primary_key=true, autoincrement=true, index=true) individual_name = db.column(db.string(40), nullable=false, index=true, unique=false) fk_family_id = db.column(db.integer, db.foreignkey('family.family_id')) samples = db.relationship('sample', backref='individual', lazy='dynamic') def __init__(self, individual_name): self.individual_name = individual_name def __repr__(self): return "<individual %r>" % self.individual_name class sample(db.model): sample_id = db.column(db.integer, primary_key=true, autoincrement=true, index=true) sample_name = db.column(db.string(40), nullable=false, index=true, unique=false) fk_individual_id = db.column(db.integer, db.foreignkey('individual.individual_id')) def __init__(self, sample_name): self.sample_name = sample_name def __repr__(self): return "<sample %r>" % self.sample_name --app
flask import flask flask_sqlalchemy import sqlalchemy flask import render_template, request, redirect, url_for app=flask(__name__) app.config['sqlalchemy_track_modifications'] = true app.config['sqlalchemy_database_uri'] = 'mysql+pymysql://root:xxx' db = sqlalchemy(app) app.models.test_models import family, individual, sample @app.route('/') def index(): return render_template('add_user.html') @app.route('/post_user', methods=['post','get']) def post_user(): family = family(request.form['family_name'], request.form['family_relationship']) individual = individual(request.form['individual_name']) sample = sample(request.form['sample_name']) db.session.add(family) db.session.add(individual) db.session.add(sample) db.session.flush() db.session.commit() return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=true, threaded=true)
Comments
Post a Comment