sqlalchemy单表操作,增删改查

一. 单表操作

1,创建表:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,INT,INTEGER,VARCHAR,String
from sqlalchemy import create_engine
import pymysql

Base=declarative_base()  #创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联
class User(Base):  #继承Base基类
    __tablename__ = 'user'  #表名
    id = Column(Integer,primary_key=True,autoincrement=True)  # id字段,Integer表示整形
    name = Column(String(32),index=True)  # name字段,string(32)定长字符
    
engine = create_engine('mysql+pymysql://root:dd112211@127.0.0.1:3306/sqlalchemy?charset=utf8')  #数据库引擎
Base.metadata.create_all(engine)  #将所有继承Base类的表创建

2,新增: session.add

新增1条:

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,INT,INTEGER,VARCHAR,String
from sqlalchemy import create_engine
import pymysql

Base=declarative_base()  #创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联
class User(Base):  #继承Base基类
    __tablename__ = 'user'  #表名
    id = Column(Integer,primary_key=True,autoincrement=True)  # id字段,Integer表示整形
    name = Column(String(32),index=True)  # name字段,string(32)定长字符


engine = create_engine('mysql+pymysql://root:dd112211@127.0.0.1:3306/sqlalchemy?charset=utf8')  # 数据库引擎
Session_window = sessionmaker(engine)  # 实例化会话窗口
db_session = Session_window()  # 打开会话窗口

user_obj = User(name="DragonFire") # 创建sql语句,相当于insert into table(name) values("123")
db_session.add(user_obj) # 添加sql语句

db_session.commit() # 执行全部的sql语句
db_session.close()  # 关闭会话窗口

新增多条 session.add_all:

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,INT,INTEGER,VARCHAR,String
from sqlalchemy import create_engine
import pymysql

Base=declarative_base()  #创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联
class User(Base):  #继承Base基类
    __tablename__ = 'user'  #表名
    id = Column(Integer,primary_key=True,autoincrement=True)  # id字段,Integer表示整形
    name = Column(String(32),index=True)  # name字段,string(32)定长字符


engine = create_engine('mysql+pymysql://root:dd112211@127.0.0.1:3306/sqlalchemy?charset=utf8')  # 数据库引擎
Session_window = sessionmaker(engine)  # 实例化会话窗口
db_session = Session_window()  # 打开会话窗口

user_obj_list = [User(name="天一"),User(name="天二")]
db_session.add_all(user_obj_list)  # 添加任务
db_session.commit()  # 执行任务
db_session.close()  # 关闭会话

3,查询: session.query

普通查询:

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,INT,INTEGER,VARCHAR,String
from sqlalchemy import create_engine
import pymysql

Base=declarative_base()  #创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联
class User(Base):  #继承Base基类
    __tablename__ = 'user'  #表名
    id = Column(Integer,primary_key=True,autoincrement=True)  # id字段,Integer表示整形
    name = Column(String(32),index=True)  # name字段,string(32)定长字符


engine = create_engine('mysql+pymysql://root:dd112211@127.0.0.1:3306/sqlalchemy?charset=utf8')  # 数据库引擎

Session_window = sessionmaker(engine)  # 实例化会话窗口
db_session = Session_window()  # 打开会话窗口


user_obj = db_session.query(User).first()  # 查询user表第一条
print(user_obj.id,user_obj.name)

user_obj_list = db_session.query(User).all()  #查询user表所有
print(user_obj_list)
for row in user_obj_list:
    print(row.id,row.name)

条件查询:

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,INT,INTEGER,VARCHAR,String
from sqlalchemy import create_engine
import pymysql

Base=declarative_base()  #创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联
class User(Base):  #继承Base基类
    __tablename__ = 'user'  #表名
    id = Column(Integer,primary_key=True,autoincrement=True)  # id字段,Integer表示整形
    name = Column(String(32),index=True)  # name字段,string(32)定长字符


engine = create_engine('mysql+pymysql://root:dd112211@127.0.0.1:3306/sqlalchemy?charset=utf8')  # 数据库引擎

Session_window = sessionmaker(engine)  # 实例化会话窗口
db_session = Session_window()  # 打开会话窗口

# 单条件查询
user_obj = db_session.query(User).filter(User.id>1).all() # 查询user.id大于1的所有数据
user_obj = db_session.query(User).filter(User.name=='天一').all() # 查询name为天一的数据
# 多条件查询,使用','逗号隔开
user_obj = db_session.query(User).filter(User.id>1,User.name=='天一').all() # 查询id大于1且name为天一的数据
# between在a,b之间
user_obj = db_session.query(User).filter(User.id.between(1,3)).all() # 查询id在1到3之间的数据
# in_(),接收一个列表
user_obj = db_session.query(Users).filter(Users.id.in_([1,3,4])).all()  #查询id在[1,3,4]列表里面的数据
# ~取反
user_obj = db_session.query(Users).filter(~Users.id.in_([1,3,4])).all()  #查询id不在[1,3,4]列表里面的数据
ret = session
# 子查询
db_session.query(Users).filter(Users.id.in_(db_session.query(Users.id).filter_by(name='天二'))).all()
# 查询条件的关系and or
from sqlalchemy import and_, or_
# and_
user_obj = db_session.query(Users).filter(and_(Users.id > 3, Users.name == '天一')).all()  # 查id大于3且name是天一的数据
# or_
user_obj = db_session.filter(or_(Users.id < 2, Users.name == '天一')).all()  # 查询id大于2或者name是天一
# 组合关系
user_obj = db_session.query(Users).filter(
    or_(
        Users.id < 2,
        and_(Users.name == '天一', Users.id > 3),
        Users.extra != ""
    )).all()
# 通配符%,模糊匹配like(),%表示0到多个
user_obj = db_session.query(Users).filter(Users.name.like('天%')).all()  # 查询name是天*数据
user_obj = db_session.query(Users).filter(~Users.name.like('天%')).all()  # 查询name是非天*数据
# 限制 limit
user_obj = db_session.query(Users)[1:2]
# 排序
user_obj = db_session.query(Users).order_by(Users.name.desc()).all()  #通过name排序
# 多条件排序是按第一种方式排出现相同时,将相同值按第二种方式排
user_obj = db_session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()


4,修改:session.query().update()

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,INT,INTEGER,VARCHAR,String
from sqlalchemy import create_engine
import pymysql


Base=declarative_base()  #创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联
class User(Base):  #继承Base基类
    __tablename__ = 'user'  #表名
    id = Column(Integer,primary_key=True,autoincrement=True)  # id字段,Integer表示整形
    name = Column(String(32),index=True)  # name字段,string(32)定长字符


engine = create_engine('mysql+pymysql://root:dd112211@127.0.0.1:3306/sqlalchemy?charset=utf8')  # 数据库引擎

Session_window = sessionmaker(engine)  # 实例化会话窗口
db_session = Session_window()  # 打开会话窗口


# 1.修改一条数据
user_obj = db_session.query(User).filter(User.id == 1).update({"name":"天三"})
db_session.commit()

# 2.修改多条数据
user_obj = db_session.query(User).filter(User.id >= 1).update({"name":"天六"})
db_session.commit()
# 3.在原表基础上修改
# synchronize_session用于query在进行delete or update操作时,对session的同步策略
#False - 不对session进行同步,直接进行delete or update操作。
#'fetch'-在delete or update操作之前,先发一条sql到数据库获取符合条件的记录。
# 'evaluate' 在delete or update操作之前,用query中的条件直接对session的identity_map中的objects进行eval操作,将符合条件的记录下来。
session.query(Users).filter(Users.id > 0).update({Users.name: Users.name + "099"}, synchronize_session=False)
session.query(Users).filter(Users.id > 0).update({"age": Users.age + 1}, synchronize_session="evaluate")

5,删除:session.query().delete()

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,INT,INTEGER,VARCHAR,String
from sqlalchemy import create_engine
import pymysql


Base=declarative_base()  #创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联
class User(Base):  #继承Base基类
    __tablename__ = 'user'  #表名
    id = Column(Integer,primary_key=True,autoincrement=True)  # id字段,Integer表示整形
    name = Column(String(32),index=True)  # name字段,string(32)定长字符


engine = create_engine('mysql+pymysql://root:dd112211@127.0.0.1:3306/sqlalchemy?charset=utf8')  # 数据库引擎

Session_window = sessionmaker(engine)  # 实例化会话窗口
db_session = Session_window()  # 打开会话窗口

# 1.删除数据
res = db_session.query(User).filter(User.id == 1).delete()
db_session.commit()

# 2.删除多条数据
res = db_session.query(User).filter(User.id>=1).delete()
db_session.commit()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值