单表操作 

(一)创建、删除单表

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()
about_table_SQLAlchemy

(二)增、删、改、查

 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()
add_item

  查: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)
query_item

  改: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()
update_item

  删: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()
delete_item

  注意:参数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()
table_content_operate