SQLAlchemy
官方文档: https://docs.sqlalchemy.org/en/14/orm/quickstart.html
一 介绍
基于python实现的ORM框架
能单独使用, 并不是像Djano的ORM一样需要只能在Django中使用
数据库连接URL中, 若密码含特殊字符如@, 会导致解析错误
二 简单使用
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
---查询不需要提交事务---
查记录 - 写法2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!