单表操作
(一)创建、删除单表
1、启动引擎: engine = create_engine(mysql+pymysql://<username>:<
password
>@<host>/<dbname>[?<options>]
)
2、生成SQLORM基类: Base = declarative_base()
3、构建表类:一个类代表一张表 class Users(Base):……
4、生成表或删除表: Base.metadata.create_all(engine) \ Base.metadata.drop_all(engine)

#!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine # 1、启动引擎engine # engine = create_engine("mysql+pymysql://root@127.0.0.1:3306/chouti",echo=True) # echo:显示由类翻译成的SQL语句 engine = create_engine("mysql+pymysql://root@127.0.0.1:3306/chouti?charset=utf8") # 2、生成SQLORM基类 Base = declarative_base() # 3、创建表结构 class Users(Base): # 表名 __tablename__ = 'users' # 表字段 id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(32),nullable=False) number = Column(Integer,unique=True) pwd = Column(String(64),index=True,) extra = Column(String(64)) # 组合索引 __table_args__ = ( UniqueConstraint('id','name',name='uix_id_name'), Index('ix','name','extra'), ) # 查看表中具体字段信息时,直接显示内容而不是object def __repr__(self): return "%s-%d-%s"%(self.name,self.number,self.extra) # 4、生成表 def init_db(): Base.metadata.create_all(engine) # 5、删除表 def drop_db(): Base.metadata.drop_all(engine) init_db() # drop_db()
(二)增、删、改、查
1、引入session:
Session = sessionmaker(bind=engine)
session = Session()
2、通过session执行操作:
增:session.add()、session.add_all(),

# 添加单条数据 obj = Users(name='lucy',number=202501,pwd='ndiofnio') session.add(obj) # 添加多条数据,使用列表 obj = [ Users(name='lucy1',number=202502,pwd='ndiofnio1'), Users(name='lucy2',number=202503,pwd='ndiofnio2'), Users(name='lucy3',number=202504,pwd='ndiofnio3'), ] session.add_all(obj) # 数据添加好后,提交 session.commit()
查:session.query().all()、session.query().filter().first()、session.query().filter_by()[start:end]
session.query|()\session.query().filter()后面不加.all()、first()、[start,end]时,显示的是执行查询的sql语句

# 查Users.__repr__()中设置的返回值 ret = session.query(Users).all() # 全部 print(ret) ret = session.query(Users).first() # 首个 print(ret) ret = session.query(Users)[1:3] # 切片 print(ret) ret = session.query(Users).filter_by(name='lucy2').all() # filter_by:键值对 print(ret) ret = session.query(Users).filter(Users.name=='lucy2').all() # filter:条件语句 print(ret) # 查具体字段 ret = session.query(Users.name,Users.pwd).all() print(ret) ret = session.query(Users.name,Users.pwd).first() print(ret) ret = session.query(Users.name,Users.pwd)[2:3] print(ret) ret = session.query(Users.name,Users.pwd).filter(Users.name.like('%lucy%')).all() print(ret) ret = session.query(Users.name,Users.pwd).filter_by(name='lucy2').all() print(ret)
改:session.query().filter().update({......},synchronize_session=False/'fetch'/'evaluate')

session.query(Users).filter(Users.id == 2).update({'name':'luna'}) session.query(Users).filter(Users.id > 2).update({Users.name:"$"+Users.name,Users.extra:'f',},synchronize_session=False) session.query(Users).filter(Users.id == 1).update({Users.extra:'k',},synchronize_session='evaluate') session.query(Users).filter(Users.name.like('%lucy%')).update({Users.extra:'p',},synchronize_session='fetch') session.commit()
删:session.query().filter().delete(synchronize_session=False/'fetch'/'evaluate')

session.query(Users).filter(Users.name=='$$lucy3').delete() session.query(Users).filter(Users.name.like('%lucy2%')).delete(synchronize_session='fetch') session.commit()
注意:参数synchronize_session,用于query进行delete或者update时,对session的同步策略:
- False -对session进行同步,直接进行delete or update操作。
- 'fetch'- 在delete or update操作之前,先发一条sql到数据库获取符合条件的记录。
- 'evaluate' - 在delete or update操作之前,用query中的条件直接对session的identity_map中的objects进行eval操作,将符合条件的记录下来。在delete or update操作之后,将符合条件的记录删除或更新。

#!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine # 1、导入表 from about_table import Users # 2、启动引擎engine engine = create_engine("mysql+pymysql://root@127.0.0.1:3306/chouti?charset=utf8") # 3、引入session Session = sessionmaker(bind=engine) session = Session() # 4、通过session进行操作 # #-----------------------增-------------------------- # 添加单条数据 obj = Users(name='lucy',number=202501,pwd='ndiofnio') session.add(obj) # 添加多条数据,使用列表 obj = [ Users(name='lucy1',number=202502,pwd='ndiofnio1'), Users(name='lucy2',number=202503,pwd='ndiofnio2'), Users(name='lucy3',number=202504,pwd='ndiofnio3'), ] session.add_all(obj) # 数据添加好后,提交 session.commit() # #-----------------------查-------------------------- # 查Users.__repr__()中设置的返回值 ret = session.query(Users).all() # 全部 print(ret) ret = session.query(Users).first() # 首个 print(ret) ret = session.query(Users)[1:3] # 切片 print(ret) ret = session.query(Users).filter_by(name='lucy2').all() # filter_by:键值对 print(ret) ret = session.query(Users).filter(Users.name=='lucy2').all() # filter:条件语句 print(ret) # 查具体字段 ret = session.query(Users.name,Users.pwd).all() print(ret) ret = session.query(Users.name,Users.pwd).first() print(ret) ret = session.query(Users.name,Users.pwd)[2:3] print(ret) ret = session.query(Users.name,Users.pwd).filter(Users.name.like('%lucy%')).all() print(ret) ret = session.query(Users.name,Users.pwd).filter_by(name='lucy2').all() print(ret) # #-----------------------改-------------------------- session.query(Users).filter(Users.id == 2).update({'name':'luna'}) session.query(Users).filter(Users.id > 2).update({Users.name:"$"+Users.name,Users.extra:'f',},synchronize_session=False) session.query(Users).filter(Users.id == 1).update({Users.extra:'k',},synchronize_session='evaluate') session.query(Users).filter(Users.name.like('%lucy%')).update({Users.extra:'p',},synchronize_session='fetch') session.commit() # #-----------------------删-------------------------- session.query(Users).filter(Users.name=='$$lucy3').delete() session.query(Users).filter(Users.name.like('%lucy2%')).delete(synchronize_session='fetch') session.commit()