Flask SQLAlchemy一对一,一对多的使用方法实践

下面我就详细讲解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对象。然后,我们分别创建了StudentAddress两个模型类。

在学生表Student中,我们定义了三个属性:idnameaddress。其中,id是我们的主键,必须要有。name是学生的名字,是一个字符串类型。最后一个属性是address,用来存储学生的地址信息。我们使用db.relationship函数来定义学生和地址表的一对一关系。我们可以看到,这个方法的默认值是uselist=True,也就是说,如果我们不特别指定的话,一个学生可以对应多个地址。但是在这个例子中,我们希望一个学生只有一个地址,所以我们将uselist设置为False

在地址表中Address,我们定义了四个属性:idstreetcitystate。和学生表一样,我们也定义了id作为主键。然后,我们增加了三个属性:streetcitystate,分别代表了学生的详细地址信息。最后一个属性是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

这个命令可以向StudentAddress表中添加一名学生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中,我们定义了两个属性:idname。其中,id是我们的主键,必须要有。name是学生的名字,是一个字符串类型。最后一个属性是courses,用来存储学生选修的所有课程信息。我们使用db.relationship函数来定义学生和课程表的一对多关系。

在课程表中Course,我们定义了四个属性:idnamedatestudent_id。和学生表一样,我们也定义了id作为主键。然后,我们增加了三个属性:namedatestudent_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

这两个命令可以分别向StudentCourse表中添加一名学生Boinao和一门数学课程,并且将这门课程和学生Boinao关联起来。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask SQLAlchemy一对一,一对多的使用方法实践 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • python 获取sqlite3数据库的表名和表字段名的实例

    接下来我将详细讲解“python 获取sqlite3数据库的表名和表字段名的实例”的完整攻略,过程中也会包含两条示例说明。 1. 获取sqlite3数据库的表名 我们可以通过sqlite_master系统表来获取sqlite3数据库中的表名。 示例代码: import sqlite3 def get_table_names(db_file_path): co…

    Flask 2023年5月16日
    00
  • 基于go-cqhttp与Flask搭建定制机器人项目实战示例

    下面我将详细讲解“基于go-cqhttp与Flask搭建定制机器人项目实战示例”的完整攻略,这个过程中包含两条示例的说明。 简介 本攻略将介绍使用go-cqhttp和Flask两个工具搭建一个定制的QQ机器人项目。其中第一条示例将展示如何使用go-cqhttp和Flask来实现一个抢购机器人,而第二条则将介绍如何使用这两个工具来实现一个天气查询机器人。 环境…

    Flask 2023年5月16日
    00
  • go-cqhttp智能聊天功能的实现

    让我一一为你详细讲解实现”go-cqhttp智能聊天功能”的完整攻略。 1. 安装Go环境和go-cqhttp插件 首先,我们需要在本地安装Go语言环境和go-cqhttp插件。具体安装步骤可以参考对应官方文档。 2. 搭建机器人服务 接着,我们需要在本地搭建机器人服务,让机器人能够和QQ进行通信。这部分可以通过在go-cqhttp插件的配置文件中设置相应参…

    Flask 2023年5月16日
    00
  • Python的flask接收前台的ajax的post数据和get数据的方法

    关于“Python的Flask接收前台的ajax的POST数据和GET数据的方法”的攻略,可以分为两部分来讲解。下面将详细介绍这两部分内容。 一、Flask接收前台的ajax的POST数据的方法 一般情况下,前台向后台提交数据的方式有POST和GET两种。在Flask中,接收前台的ajax的POST数据的方法,可以通过request对象进行获取。 下面是一个…

    Flask 2023年5月16日
    00
  • .net任务调度框架FluentScheduler简介

    .NET任务调度框架FluentScheduler简介 简介 FluentScheduler是一款基于.NET的任务调度框架,可以提供简单易用的API,支持多种类型的任务,可以满足各种复杂的任务调度需求。使用FluentScheduler可以省去很多手动编写任务调度代码的工作,提高了编码效率。 安装 使用NuGet包管理器或在Visual Studio的包管…

    Flask 2023年5月16日
    00
  • python实现rest请求api示例

    下面是详细讲解“Python实现REST请求API示例”的完整攻略。 一、REST请求API简介 REST(Representational State Transfer)是一种基于HTTP协议的Web服务接口设计风格,它以资源为核心,提供统一的接口设计方法,是目前最流行的Web API开发方式之一。RESTful API的调用方式很简单,即构造一个HTTP…

    Flask 2023年5月16日
    00
  • python框架flask入门之路由及简单实现方法

    下面是完整的“Python框架Flask入门之路由及简单实现方法”的攻略,内容包括路由的基本使用和两个简单的实现方法示例。 路由的基本使用 什么是路由 Flask是一个轻量级的Python Web框架,它的核心是Werkzeug和Jinja2。其中Werkzeug是一个WSGI(Web Server Gateway Interface) 工具库,提供了Web…

    Flask 2023年5月15日
    00
  • Python Type Hints 学习之从入门到实践

    下面是详细讲解“Python Type Hints 学习之从入门到实践”的完整攻略: Python Type Hints 学习之从入门到实践 什么是 Python Type Hints Python 从 3.5 版本开始引入了 Type Hints 的概念,它是一种用于标注函数、变量、类等对象类型的注释。Python 并不会在运行时对其进行强制校验,但是可以…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部