SQLAlchemy
官方文档: https://docs.sqlalchemy.org/en/14/orm/quickstart.html
一 介绍
基于python实现的ORM框架
能单独使用, 并不是像Djano的ORM一样需要只能在Django中使用
二 简单使用
1 创建表 删除表
不能修改表: 那想增加一个字段怎么办? 直接写sql增加字段,然后往模型类中把该字段加上, 进行增删改查记录即可
xxx.py (任意文件名)
import datetime from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index Base = declarative_base() HOST = '127.0.0.1' PORT = 3306 USERNAME = 'root' PASSWORD = '123' DATABASE_NAME = 'test_flask01' DB_URL = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE_NAME}?charset=utf8mb4' class User(Base): __tablename__ = 'users' # 数据库表名 id = Column(Integer, primary_key=True) name = Column(String(32), index=True, nullable=False) # email = Column(String(32), unique=True) # datetime.datetime.now不能加括号,加了就永远是一个时间 # ctime = Column(DateTime, default=datetime.datetime.now) # extra = Column(Text, nullable=True) __table_args__ = ( # UniqueConstraint('id', 'name', name='uix_id_name'), # 联合唯一 # Index('ix_id_name', 'name', 'email'), # 索引 ) def init_db(): """ 根据类创建数据库表 :return: """ engine = create_engine( DB_URL, max_overflow=0, # 超过连接池大小外最多创建的连接数 pool_size=5, # 连接池大小, pool_timeout=30, # 池中没有线程最多等待时间,否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接回收(重置) ) Base.metadata.create_all(engine) def drop_db(): """ 删除数据库表 :return: """ engine = create_engine( DB_URL, max_overflow=0, # 超过连接池大小外最多创建的连接数 pool_size=5, # 连接池大小, pool_timeout=30, # 池中没有线程最多等待时间,否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接回收(重置) ) Base.metadata.drop_all(engine) if __name__ == '__main__': init_db() # drop_db()
2 记录的增删改查
2.1 增加记录
app01.py
# app01.py from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import User, DB_URL engine = create_engine( DB_URL, max_overflow=0, # 超过连接池大小外最多创建的连接数 pool_size=5, # 连接池大小, ) Session = sessionmaker(bind=engine) # 每次执行数据库操作都需要创建一个Session session = Session() # ########## 执行ORM操作 ########## obj1 = User(name='json') session.add(obj1) session.commit() # 提交事务 session.close() # 关闭连接,其实是将连接放回连接池
# 核心1
# 核心2
# 核心3
---查询不需要提交事务---