flask-SQLAlchemy连接数据库,并进行一些基本操作

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: flask-SQLAlchemy连接数据库,并进行一些基本操作

flask-SQLAlchemy连接数据库,并进行一些基本操作


介绍


flask介绍


Flask是一个轻量级的Python Web框架,它基于Werkzeug和Jinja2库构建,因其简洁、灵活、易扩展等特性而广受欢迎。


Flask的核心设计理念是"micro",即"微型"。相比于其他大型的Web框架,Flask仅提供了最基本的功能集,如路由、请求与响应处理、模板渲染等,但同时也允许开发者通过插件或扩展来添加更多的功能。这种设计方式使得Flask非常适合构建小型的Web应用程序、API服务以及原型验证等场景。


除此之外,Flask还具有以下优点:


  1.    简单易学:Flask的API设计非常简单,易于掌握和使用。
  2.    高度灵活:Flask允许开发者根据实际需求自由选择需要引入的插件或库,从而实现高度灵活的定制化。
  3.    轻量级高效:Flask的核心代码很小,运行速度非常快,可以应对高并发的访问。
  4.    丰富的扩展库:Flask拥有庞大的扩展库,涵盖了数据库、表单验证、用户认证、缓存等各个方面的功能。



总之,Flask是一个简单、灵活、可扩展的Python Web框架,适用于各种规模的Web应用程序开发。它的设计思想和哲学使得开发者可以快速上手、高效开发,并且能够根据实际需求进行自由扩展。




SQLAlchemy介绍


SQLAlchemy是一个Python的ORM(对象关系映射)工具,它提供了一种将关系数据库映射到Python对象的方式。ORM是一种编程模式,使得我们可以通过使用面向对象的语法来操作关系型数据库,从而抽象出底层的SQL查询。


SQLAlchemy提供了一种高级、Pythonic的接口,让程序员能够使用Python代码进行数据库操作,而无需直接编写SQL。同时,它还提供了对多个关系数据库的支持,包括MySQL、PostgreSQL、Oracle、Microsoft SQL Server等。


SQLAlchemy提供两种不同的API:Core API和ORM API。Core API提供了底层的SQL表达式和查询构建,ORM API则提供了更高级别的面向对象的数据访问和持久化。


使用SQLAlchemy,开发者可以轻松地创建和管理数据库表、执行复杂的查询、实现事务处理、维护数据完整性等。它还支持连接池、线程安全、自动回滚等特性,以提高应用程序的性能和可靠性。


总之,SQLAlchemy是一个强大、灵活、易于使用的Python ORM框架,是Python开发者在处理关系型数据库时不可或缺的工具之一。



Flask-SQLAlchemy介绍


Flask-SQLAlchemy是一个为Flask应用程序提供SQLAlchemy支持的扩展,它通过将SQLAlchemy集成到Flask中,让开发者可以更加方便地使用ORM(对象关系映射)模型来操作数据库。


Flask-SQLAlchemy提供了一种面向对象的方式来处理数据库,用户可以通过定义Python类来映射数据库表格。这些类通常被称为“模型”,每个模型对应一个数据库表格,其中类属性对应表格的列。


Flask-SQLAlchemy的主要特性包括:


  1.    简单易用:Flask-SQLAlchemy提供了简洁、易于理解和学习的API,用户可以快速上手并开始构建数据库模型。
  2.    数据库迁移:Flask-SQLAlchemy支持集成Flask-Migrate扩展实现数据库结构的自动迁移,以方便管理数据库结构的变化。
  3.    数据库会话管理:Flask-SQLAlchemy在Flask应用中提供了SQLAlchemy的会话管理功能,开发者可以轻松地进行数据库操作。
  4.    查询优化:Flask-SQLAlchemy提供了灵活的查询API,支持多种查询方式和过滤器,开发者可以根据实际需求自由选择。


总之,Flask-SQLAlchemy是一个非常强大、灵活且易于使用的ORM框架,对于使用Flask框架的Web应用程序开发人员而言,它是一个不可或缺的工具。使用Flask-SQLAlchemy,开发者可以更加方便、高效地实现数据持久化,同时也可以避免手动编写低效和容易出错的SQL语句。



连接步骤

使用Flask-SQLAlchemy,需要先安装Flask和SQLAlchemy以及Flask-SQLAlchemy扩展。可以使用pip命令来安装它们:

pip install flask
pip install sqlalchemy
pip install flask_sqlalchemy

安装完成后,可以按照以下步骤使用Flask-SQLAlchemy:


1.在Flask应用程序中导入flask_sqlalchemy模块并创建一个SQLAlchemy对象:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)


2.创建数据库模型(也称为“表”),定义一个继承自db.Model的Python类,并将类属性定义为列。例如,下面的代码定义了一个名为User的模型:

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)


3.创建数据库表格,可以使用Flask-Migrate扩展来进行数据库迁移管理。例如,可以运行以下命令创建迁移脚本:

flask db init #初始化,只需要一次
flask db migrate #只要更改上边的模型了,就需要执行这条和下条命令
flask db upgrade


4.使用数据库,可以使用db.session来进行数据库操作。例如,下面的代码将创建一个新的用户:

new_user = User(username='xiaogao', email='1443004194@qq.com')
db.session.add(new_user)
db.session.commit()


5.在Flask应用程序中使用数据库,可以在Flask视图函数中使用数据库进行数据查询、更新等操作。例如,下面的代码查询所有的用户并将它们渲染到HTML页面中:

@app.route('/users')
def users():
    all_users = User.query.all()
    return render_template('users.html', users=all_users)



增删改查操作


1.增加数据

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
# 定义数据表类
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    age = db.Column(db.Integer)
# 创建新用户
new_user = User(name='John', age=30)
# 添加到session并提交
db.session.add(new_user)
db.session.commit()


2.查询数据

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
# 定义数据表类
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    age = db.Column(db.Integer)
#根据id查询
user=User.query.get(1)#查询id为1的用户
# 查询所有用户
all_users = User.query.all()
#遍历
for user in all_users:
  print(f'{user.id}:{user.name}:{user.age}')
# 查询指定用户
user = User.query.filter_by(name='John').first()
# 查询年龄在20到30之间的用户
users = User.query.filter(User.age >= 20, User.age <= 30).all()


3.修改数据(更新数据)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
# 定义数据表类
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    age = db.Column(db.Integer)
# 查询需要修改的用户
user = User.query.filter_by(name='John').first()
# 修改用户信息
user.age = 35
# 提交修改
db.session.commit()


4.删除数据

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
# 定义数据表类
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    age = db.Column(db.Integer)
# 查询需要删除的用户
user = User.query.filter_by(name='John').first()
# 删除用户
db.session.delete(user)
# 提交删除
db.session.commit()


外键绑定与ORM关系映射


1.一对一关系

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
# 定义数据表类
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    age = db.Column(db.Integer)
class Post(db.Model):
    __tablename__ = 'post'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50))
    content = db.Column(db.Text)
# Post表的user_id外键绑定User表的id
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
# 根据用户创建帖子
user = User(name='John', age=30)
db.session.add(user)
db.session.commit()
post = Post(title='Hello World', content='This is my first post.', user_id=user.id)
db.session.add(post)
db.session.commit()
# 查询帖子及其对应的用户信息
post = Post.query.first()
print(post.title)
print(post.user.name)

User类包含了一个posts属性,指向了与该用户相关的所有帖子。而Post类包含了一个user属性,指向了创建该帖子的用户。通过这种方式,可以在Python对象之间建立关系,方便进行查询和操作。


2.一对多关系

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    profile = db.relationship('Profile', backref='user', uselist=False)
    # db.backref
    # 1. 在反向引用的时候,如果需要传递一些其他的参数,那么就需要用到这个函数,否则不需要使用,只要在relationship的backref参数上,设置反向引用的名称就可以了。
    # 2. uselist=False:代表反向引用的时候,不是一个列表,而是一个对象。
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = User(name='John')
post = Post(title='Hello World', content='This is my first post.')
user.posts.append(post)
db.session.add(user)
db.session.commit()

Post模型通过user_id外键引用User模型。在User模型中,我们使用posts属性定义了与Post模型的关系,并使用backref参数创建一个名为user的反向引用。这样,我们可以通过user.posts从任何一个用户对象访问其所有文章对象。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4月前
|
关系型数据库 数据库 RDS
【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】(5.30-6.8)
本周精选聚焦数据库迁移训练营、快速连接云数据库RDS训练营及智能多模态搜索解决方案。为用户提供模拟教程与实战演练,学习RDS MySQL实例连接与数据管理技能,助力企业智能化发展。每周解锁数据库实战新场景,抓紧时间,精彩不容错过!
|
6月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
5月前
|
安全 Linux 网络安全
YashanDB数据库服务端SSL连接配置
YashanDB支持通过SSL连接确保数据传输安全,需在服务端生成根证书、服务器证书及DH文件,并将根证书提供给客户端以完成身份验证。服务端配置包括使用OpenSSL工具生成证书、设置SSL参数并重启数据库;客户端则需下载根证书并正确配置环境变量与`yasc_env.ini`文件。注意:启用SSL后,所有客户端必须持有根证书才能连接,且SSL与密码认证独立运行。
|
4月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
483 77
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
231 0
|
5月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1095 28
|
5月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
276 14
|
10月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
554 3
|
10月前
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API
|
10月前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
591 2

热门文章

最新文章