在Flask中使用Flask-SQLAlchemy操作数据库

本文介绍了如何在Flask应用中使用Flask-SQLAlchemy进行ORM操作,包括数据库配置、创建数据库模型以及CRUD操作:创建、读取(一对多查询)、更新和删除数据。详细阐述了数据库连接字符串格式、数据类型的使用,以及各种查询方法。
摘要由CSDN通过智能技术生成
  • ORM对象关系映射
  • 数据库配置
  • 创建数据库模型
  • 操作数据库
    • 插入数据
    • 一对多查询
    • 数据更新
    • 数据删除

ORM=对象关系映射

英文名称为Object-Relational-Mapping,它提供了概念性的,易于理解的模型化数据的方法。Flask-SQLAlchemy就是一个ORM模块。应用在Flask中使得操作数据库非常方便
在这里插入图片描述

ORM 把数据库映射成为对象:

  • 数据库的表(table) --> 类(class)
  • 表的记录(record,行数据) --> 对象(Object)
  • 字段(field) --> 对象的属性(attribute)

数据库配置

在Flask中可以连接各种数据库,这里使用用于开发调试的sqlite数据库和MySQL数据库,其他的例如PostgreSQL或者Oracle也可以。下面列出详细的数据库连接字符串:

连接字符串格式

dialect+driver://username:password@host:port/database

常用数据库连接字符串

Postgres:
postgresql://scott:tiger@localhost/mydatabase

MySQL:
mysql://scott:tiger@localhost/mydatabase

Oracle:
oracle://scott:tiger@127.0.0.1:1521/sidname

SQLite (note that platform path conventions apply):
#Unix/Mac (note the four leading slashes)
sqlite:absolute/path/to/foo.db
#Windows (note 3 leading forward slashes and backslash escapes)
sqlite:///C:\\absolute\\path\\to\\foo.db
#Windows (alternative using raw string)
r'sqlite:///C:\absolute\path\to\foo.db'

例如有数据库配置文件app.py:

SQLALCHEMY_DATABASE_URI = 'mysql://root:123@localhost:3306/myinstagram'
# SQLALCHEMY_DATABASE_URI = 'sqlite:///../myinstagram.db'
# remove FSADeprecationWarning:
SQLALCHEMY_TRACK_MODIFICATIONS = True

官方配置文档可以查看连接:
https://flask-sqlalchemy.palletsprojects.com/en/2.x/config/#connection-uri-format

创建数据库模型

根据ORM基本原理,操作数据库就是操作内存中的对象,创建的数据库模型如下:

#!/usr/bin/env python3
# -*-encoding:UTF-8-*-
from datetime import datetime

from myinstagram import db
import random


class Comment(db.Model):
    id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)
    content = db.Column(db.String(1024))
    image_id = db.Column(db.INTEGER, db.ForeignKey('image.id'))
    user_id = db.Column(db.INTEGER, db.ForeignKey('user.id'))
    status = db.Column(db.INTEGER, default=0)  # 正常情况是0,否则是1
    user = db.relationship('User')

    def __init__(self, content, image_id, user_id):
        """
        status 是不用初始化的,因为默认是0了
        :param content:
        :param image_id:
        :param user_id:
        """
        self.content = content
        self.image_id = image_id
        self.user_id = user_id

    def __repr__(self):
        # 默认的输出方法
        return '<Comment: %d %d>' % (self.id, self.status)


class Image(db.Model):
    id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)
    url 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值