下面我就详细讲解Flask SQLAlchemy一对一、一对多的使用方法实践的完整攻略,包含两条示例说明:
一、Flask SQLAlchemy一对一的使用方法实践
1.1 创建Flask项目
首先,我们需要创建一个Flask项目,可以使用以下命令来创建:
mkdir flask_one_to_one
cd flask_one_to_one
virtualenv venv
source venv/bin/activate
pip install Flask
1.2 创建数据库
我们创建一个名为example的数据库,在终端中输入以下命令:
createdb example
1.3 安装Flask SQLAlchemy
安装Flask SQLAlchemy模块,使用以下命令:
pip install Flask-SQLAlchemy
1.4 创建模型
创建一对一的关联关系模型,创建两个表,一个是学生表,一个是地址表。每个学生都有一个地址。
首先,在models.py
文件中导入Flask SQLAlchemy模块,然后开始创建模型:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
address = db.relationship('Address', backref='student', uselist=False)
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
street = db.Column(db.String(80), nullable=False)
city = db.Column(db.String(80), nullable=False)
state = db.Column(db.String(80), nullable=False)
student_id = db.Column(db.Integer, db.ForeignKey('student.id'))
以上代码中,我们先创建了一个Flask SQLAlchemy的实例,即db
对象。然后,我们分别创建了Student
和Address
两个模型类。
在学生表Student
中,我们定义了三个属性:id
,name
和address
。其中,id
是我们的主键,必须要有。name
是学生的名字,是一个字符串类型。最后一个属性是address
,用来存储学生的地址信息。我们使用db.relationship
函数来定义学生和地址表的一对一关系。我们可以看到,这个方法的默认值是uselist=True
,也就是说,如果我们不特别指定的话,一个学生可以对应多个地址。但是在这个例子中,我们希望一个学生只有一个地址,所以我们将uselist
设置为False
。
在地址表中Address
,我们定义了四个属性:id
,street
,city
和state
。和学生表一样,我们也定义了id
作为主键。然后,我们增加了三个属性:street
,city
和state
,分别代表了学生的详细地址信息。最后一个属性是student_id
,它用来建立学生和地址的联系。
1.5 初始化数据库
为了使模型生效,我们需要初始化数据库。在终端中,输入以下命令:
python
from models import db
db.create_all()
这个命令可以将我们定义的模型同步到具体的数据库之中。
1.6 创建视图
我们下一步需要创建视图,代码如下:
from flask import Flask, jsonify
from models import db, Student, Address
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/example'
db.init_app(app)
@app.route('/')
def index():
return 'Welcome to the One-to-One Example App!'
@app.route('/add_student/<string:name>/<string:street>/<string:city>/<string:state>', methods=['PUT'])
def add_student(name, street, city, state):
student = Student(name=name)
address = Address(street=street, city=city, state=state)
student.address = address
db.session.add(student)
db.session.commit()
return jsonify({'student_id': student.id})
以上代码中,我们创建了两个Flask路由,一个是/
根路由,返回一个欢迎信息;另一个是/add_student
添加学生信息的路由。我们在这里演示了如何向学生表和地址表同时插入数据,并且建立一对一的关系。
1.7 运行Flask应用
最后,我们使用以下命令启动应用:
export FLASK_APP=app.py
flask run
在浏览器中,我们可以访问http://127.0.0.1:5000/
,应该可以看到Welcome to the One-to-One Example App!
的欢迎信息,然后,我们可以使用以下命令向学生和地址表中添加数据:
curl -X PUT http://127.0.0.1:5000/add_student/Boinao/101 Broadway/New York/NY
这个命令可以向Student
和Address
表中添加一名学生Boinao,并且设置他的地址为101 Broadway,New York,NY,此处命令中的参数是用/分隔的
二、Flask SQLAlchemy一对多的使用方法实践
2.1 创建Flask项目
同样地,我们需要先创建一个Flask项目。在这个例子中,我们创建了一个名为flask_one_to_many
的文件夹,并进入文件夹。
mkdir flask_one_to_many
cd flask_one_to_many
2.2 创建数据库
我们需要创建一个名为example
的数据库:
createdb example
2.3 安装Flask SQLAlchemy
安装Flask SQLAlchemy模块,使用以下命令:
pip install Flask-SQLAlchemy
2.4 创建模型
创建一对多的关联关系模型。创建两个表,一个是学生表,一个是课程表。一个学生可以选修多门课。
在models.py
文件中导入Flask SQLAlchemy模块,然后开始创建模型:
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
courses = db.relationship('Course', backref='student')
class Course(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())
student_id = db.Column(db.Integer, db.ForeignKey('student.id'))
以上代码中,我们创建了两个表,一个是Student
,一个是Course
,分别代表学生和课程。
在学生表Student
中,我们定义了两个属性:id
和name
。其中,id
是我们的主键,必须要有。name
是学生的名字,是一个字符串类型。最后一个属性是courses
,用来存储学生选修的所有课程信息。我们使用db.relationship
函数来定义学生和课程表的一对多关系。
在课程表中Course
,我们定义了四个属性:id
,name
,date
和student_id
。和学生表一样,我们也定义了id
作为主键。然后,我们增加了三个属性:name
,date
和student_id
,分别代表课程的名称,上课时间和学生的ID。最后,我们使用db.ForeignKey
函数建立了学生和课程表的关联。
2.5 初始化数据库
为了使模型生效,我们需要初始化数据库。在终端中,输入以下命令:
python
from models import db
db.create_all()
2.6 创建视图
我们下一步需要创建视图,代码如下:
from flask import Flask, jsonify
from models import db, Student, Course
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/example'
db.init_app(app)
@app.route('/')
def index():
return 'Welcome to the One-to-Many Example App!'
@app.route('/add_course/<string:name>/<int:student_id>', methods=['PUT'])
def add_course(name, student_id):
course = Course(name=name, student_id=student_id)
db.session.add(course)
db.session.commit()
return jsonify({'course_id': course.id})
@app.route('/add_student/<string:name>', methods=['PUT'])
def add_student(name):
student = Student(name=name)
db.session.add(student)
db.session.commit()
return jsonify({'student_id': student.id})
以上代码中,我们创建了两个Flask路由,一个是/
根路由,返回一个欢迎信息;另外两个是/add_course
和/add_student
添加学生和课程的路由。
在/add_student
路由中,我们向Student
表中添加一名学生。在/add_course
路由中,我们向Course
表中添加一门课,并且将这门课程和相应的学生ID关联起来。我们可以看到,这里使用了student_id
参数来指定学生的ID。
2.7 运行Flask应用
最后,我们使用以下命令启动应用:
export FLASK_APP=app.py
flask run
在浏览器中,我们可以访问http://127.0.0.1:5000/
,应该可以看到Welcome to the One-to-Many Example App!
的欢迎信息。然后,我们可以使用以下命令向学生和课程表中添加数据:
curl -X PUT http://127.0.0.1:5000/add_student/Boinao
curl -X PUT http://127.0.0.1:5000/add_course/Math/1
这两个命令可以分别向Student
和Course
表中添加一名学生Boinao和一门数学课程,并且将这门课程和学生Boinao关联起来。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask SQLAlchemy一对一,一对多的使用方法实践 - Python技术站