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

yizhihongxing

下面我就详细讲解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的flask常用函数route()

    Python Flask的route()函数 @app.route(rule, options) 是flask框架中用于定义路由的装饰器,route()函数就是用来注册路由的。rule为路由匹配规则,options为路由附带属性,例如请求的方式限制、自定义的参数等。route()函数可以帮助我们将HTTP请求映射到一个具体的处理程序上。 下面是具体的示例: …

    Flask 2023年5月16日
    00
  • ajax post下载flask文件流以及中文文件名问题

    下面是关于“ajax post下载flask文件流以及中文文件名问题”的完整攻略,其中包含两条示例说明。 1. AJAX post下载Flask文件流 1.1 前端实现 function downloadFile() { var xhr = new XMLHttpRequest(); xhr.open(‘POST’, ‘/download’, true); …

    Flask 2023年5月16日
    00
  • python 获取sqlite3数据库的表名和表字段名的实例

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

    Flask 2023年5月16日
    00
  • 在Python程序和Flask框架中使用SQLAlchemy的教程

    以下是关于在Python程序和Flask框架中使用SQLAlchemy的完整攻略。 一、什么是SQLAlchemy SQLAlchemy 是一个 Python 的 SQL 工具和 ORM 框架。它通过 SQL 表达式和对象关系映射来支持数据库交互。 它提供了一致的 SQL 表达式语言,以及自定义对象关系映射(ORM)APIs。 二、在Python程序中使用S…

    Flask 2023年5月15日
    00
  • Python的Flask项目中获取请求用户IP地址 addr问题

    Sure!获取请求用户的IP地址是一个常见的需求,在Flask项目中也是如此。下面我将会详细讲解如何在Flask项目中获取请求用户IP地址,包含两个示例说明,一步一步介绍如何实现。 方法一:从Flask请求对象中获取IP地址 在Flask项目中获取用户IP地址是非常简单的,你只需要从Flask请求对象中获取即可。以下是一个示例代码片段: from flask…

    Flask 2023年5月16日
    00
  • Python Web框架Flask下网站开发入门实例

    下面我就详细讲解一下“Python Web框架Flask下网站开发入门实例”的完整攻略。 1. Flask框架介绍 首先,我们来介绍一下Flask框架。Flask是一个轻量级的Python Web框架,可以帮助我们快速地搭建Web应用程序。Flask只提供了基本的构建模块,让我们可以根据自己的需求进行扩展。 2. 安装Flask 在使用Flask之前,我们需…

    Flask 2023年5月15日
    00
  • Python的Flask框架标配模板引擎Jinja2的使用教程

    好的。以下是“Python的Flask框架标配模板引擎Jinja2的使用教程”的完整攻略: 什么是Jinja2 Jinja2是Flask框架默认的模板引擎。它是一个基于Python的高级模板引擎,它的设计初衷是为了和Flask框架紧密结合,因此其语法与Python非常相似。 Jinja2支持继承、过滤器、变量、控制结构等常见的模板引擎功能。同时也支持自定义过…

    Flask 2023年5月15日
    00
  • python flask框架实现重定向功能示例

    下面我会详细讲解如何使用Python Flask框架实现重定向功能,并提供两条示例说明。 什么是重定向? 重定向是指当用户向一个URL发出请求时,服务器返回一个新的URL地址,表示用户应该跳转到该地址。重定向通常是在必要时将用户引导到其他页面或站点上,并保持他们的请求 URL 的完整性。 Flask中的重定向 Flask中的重定向由redirect函数实现。…

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