一、概述
安装:pip install sqlalchemy pip install flask-sqlalchemy作用:连接数据库(MySQL, SQLite, PostgreSQL), 创建数据表
1.1、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=