SQLAlchemy 操作数据库的ORM组件

本文介绍了SQLAlchemy在Flask中的使用,涵盖概述、简单连接与数据表创建、基础的增删改查操作,以及高级的ORM方法,包括外键(FK)操作、联表查询、多对多关系等。
摘要由CSDN通过智能技术生成

一、概述

安装:pip install sqlalchemy pip install flask-sqlalchemy
作用:连接数据库(MySQL, SQLite, PostgreSQL), 创建数据表

Flask 之 flask-SQLAlchemy 的使用

1.1、SQLAlchemy 执行图

SQLAlchemy 执行图

1.2、Flask ORM执行流程

ORM是建立在SQL语言构造器之上的工具集,用于将Python对象映射到数据库的行,提供了一系列接口用于从数据库中存取对象(行)。在ORM 工作时,在底层调用SQL语言构造器的API,这些通用的操作有些许的不同。不同的是,你不再使用行,而是使用自定义类的对象来操作。另外,数据库的查询 方式也不同,ORM的可以生成大多数的SQL查询,除此之外还可以在类中定义更多操作。
在这里插入图片描述

二、简单的使用

2.1、创建连接、创建数据表

# 调用Column创建字段 加类型
from sqlalchemy import Table, Column, Integer,String,DATE, ForeignKey
# 调用操作链接,反查
from sqlalchemy.orm import relationship
# 调用基类Base
from sqlalchemy.ext.declarative import declarative_base
# 调用链接数据库
from sqlalchemy import create_engine
# 会话
from sqlalchemy.orm import sessionmaker
# 生成orm基类
Base = declarative_base()

# 创建数据库连接和连接池
engine = create_engine(
	#‘数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名
	'mysql+mysqldb://root@localhost:3306/blog?charset=utf8',
	max_overflow=5,# 超过连接池连接大小外最大连接数
	encoding="utf-8", # 指定编码
	echo=True,
	pool_size=5,# 连接池大小
	pool_timeout=30# 连接池中没有连接最多等待时间,超过报错
	pool_recycle=-1# 对线程池中的线程进行一次回收(重置)
)
Base = declarative_base()

class User(Base):
	__tablename__ = 'users'
	id = Column(Integer, primary_key=True)
	username = Column(String(64), nullable=False, index=True)
	password = Column(String(64), nullable=False)
	email = Column(String(64), nullable=False, index=True)
	def __repr__(self):
		return '%s(%r)' % (self.__class__.__name__, self.username)

2.1、基础的增删改查

# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy.orm import sessionmaker

# 创建对象的基类:
Base = declarative_base()

global engine # 创建全局变量

#建立数据库表
def create_all_tables(DB_type,DB_host,DB_port,DB_name,username,password,charset="utf8"):
    global engine
    if DB_type.upper() == "MYSQL":
        DB_URI = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=%s" % (username,password,DB_host,DB_port,DB_name,charset,)
        engine = create_engine(DB_URI,echo=True)
        # 寻找Base的所有子类,按照子类的结构在数据库中生成对应的数据表信息
        Base.metadata.create_all(engine)

# 返回数据库会话
def loadSession():
    Session = sessionmaker(bind=engine)
    session = Session()
    return session

class User(Base):
    __tablename__="User" # 创建表名
    # 表的结构:
    id = Column(Integer,primary_key=True)
    userName = Column(String(50),nullable=False,default="Noob")
    password = Column(String(50),nullable=False,default="123456")
    gender = Column(String(1),nullable=True,default=None)

    def __init__(self,id,userName,password,gender = None):
        self.id = id
        self.userName = userName
        self.password = password
        self.gender = gender


if __name__=="__main__":
    #建表
    create_all_tables("mysql","localhost",3306,"test","root","123456")

    #获取数据库会话
    session = loadSession()

    #增加
    u1 = User(id=1,userName="Rose",password="aaaa",gender="F")
    u2 = User(id=2, userName="Joe", password=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值