sqlalchemy
# 改
先把要更改的数据查询出来,
将要修改的值赋给title,
提交事务
result = Article.query.filter(Article.title == 'aaa').first()
#将要修改的值赋给title
resul.title = 'ccc'
db.session.commit()
========================================
1. 创建连接
engine = create_engine(r'sqlite:///..\test.db')
2. 声明映射
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Integer, Column, String from sqlalchemy.orm import relationship Base = declarative_base() class User(Base): # 定义表明 __tablename__ = 'users' id = Column(Integer, autoincrement=True, primary_key=True, nullable=False) name = Column(String, doc="姓名", comment="姓名") fullname = Column(String, doc="全名", comment="全名") nickname = Column(String, doc="昵称", comment="昵称") addresses = relationship("Address", back_populates="user")
# 会话 Session = sessionmaker(bind=engine)
# 声明实例 session = Session()
# 创建所有不存在的表
Base.metadata.create_all(engine) # 创建单个表 User.__table__.create(engine, checkfirst=True) # 创建多个表(在list中添加表明) table_objects = [User.__table__] # 通过Model.__table__的方式添加 table_objects = [Base.metadata.tables["users"]] # 直接通过定义的表明添加 Base.metadata.create_all(engine, tables=table_objects)
# 创建实例 session = Session() # 添加单个用户 new_user = User(name='jack', fullname='Jack Bean', nickname='gjffdd') session.add(new_user) # 只add时,数据未提交到数据库 session.commit() # 只有commit后才提交到数据库,在数据看到 # 添加多个用户 session.add_all([ User(name='wendy', fullname='Wendy Williams', nickname='windy'), User(name='mary', fullname='Mary Contrary', nickname='mary'), User(name='fred', fullname='Fred Flintstone', nickname='freddy')]) session.flush() # 必须手动flush session.commit() # 批量插入ORM版 session.bulk_save_objects([User(name='wendy', fullname='Wendy Williams', nickname='windy') for i in xrange(1000)]) # 批量插入非ORM版 result = session.execute( User.__table__.insert(), [{'name': 'wang', 'age': 10}, {}] ) # 只add未提交前可进行回滚 session.rollback() user = session.query(User).filter_by(name='jack').first() user.name = "test update" session.commit() print(user.name) # test update
# 创建表
class Even(Base): __tablename__ = "even" # 表名 id = Column(Integer, autoincrement=True, primary_key=True) name = Column(String(10), unique=True) urls = relationship("Url", backref="ev") state = Column(String(5), default="Todo") last_modified_time = Column(DateTime, server_default=func.now(), onupdate=func.now()) def __init__(self, name, state): self.state = state self.name = name
# 增
article1 = Article(title='aaa',content='bbb') db.session.add(article1) db.session.commit()
# 删
把需要删除的数据查找出来
然后用类似增加数据的方法db.session.delete(result)
提交事务
result = session.query(User).filter_by(name='jack').delete()
# 删成功返回1,否则0
session.commit()
=====
result = Article.query.filter(Article.title == 'aaa').first()
db.session.delete(result)
db.session.commit()
# 查
result = session.query(User).filter(User.name.like('%ed')).order_by(User.id) all() 返回所有查询的结果(一个列表) result.all() first() 返回第一个结果result.first() [] 直接根据索引取 result[:]
==》查询规则
# get(8) 查询id为8的用户信息 session.query(User).get(8) # distinct() 与 SQL 的 distinct 语句行为一致 query(User).filter(User.name == "test").distinct(User.id).all() # limit() 限制返回的记录条数 query(User).filter(User.id == 3).limit(3).all() # count() session.query(User).filter(User.name.like('%ed')).count() # order_by #.order_by(字段) # 正序 #.order_by(-字段) # 倒序 #.order_by(desc('字段')) # 倒序 #.order_by('字段') # 正序 from sqlalchemy import desc, asc query(User).order_by(-User.id) query(User).order_by(desc(User.id)) query(User).order_by(asc(User.id)) query(User).order_by(User.id.desc()) query(User).order_by(User.id.asc()) # 等 query.filter(User.name == 'ed') # 不等 query.filter(User.name != 'ed') # like query.filter(User.name.like('%ed%')) # ilike不区分大小写 query.filter(User.name.ilike('%ed%')) # in query.filter(User.name.in_(['ed', 'wendy', 'jack'])) query.filter(User.name.in_( session.query(User.name).filter(User.name.like('%ed%')) )) # not in query.filter(~User.name.in_(['ed', 'wendy', 'jack'])) # is null query.filter(User.name == None) query.filter(User.name.is_(None)) # is not null query.filter(User.name != None) query.filter(User.name.isnot(None)) # and # use and_() from sqlalchemy import and_ query.filter(and_(User.name == 'ed', User.fullname == 'Ed Jones')) # or send multiple expressions to .filter() query.filter(User.name == 'ed', User.fullname == 'Ed Jones') # or chain multiple filter()/filter_by() calls query.filter(User.name == 'ed').filter(User.fullname == 'Ed Jones') # or from sqlalchemy import or_ query.filter(or_(User.name == 'ed', User.name == 'wendy')) # match query.filter(User.name.match('wendy'))
** 执行sql语句查询
engine = create_engine(r'sqlite:///C:\test_new.db')
connection = engine.connect()
cursor = connection.execute("select * from users")
print(cursor.fetchall())
查询所有用户数据 User.query.all() # 查询有多少个用户 User.query.count() # 查询第1个用户 User.query.first() User.query.get(1) # 根据id查询 # 查询id为4的用户[3种方式] User.query.get(4) User.query.filter_by(id=4).all() # 简单查询 使用关键字实参的形式来设置字段名 User.query.filter(User.id == 4).all() # 复杂查询 使用恒等式等其他形式来设置条件 #查询名字结尾字符为g的所有用户[开始 / 包含] User.query.filter(User.name.endswith("g")).all() User.query.filter(User.name.startswith("w")).all() User.query.filter(User.name.contains("n")).all() User.query.filter(User.name.like("%n%g")).all() # 模糊查询 # 查询名字和邮箱都以li开头的所有用户[2种方式] User.query.filter(User.name.startswith("li"), User.email.startswith("li")).all() from sqlalchemy import and_ User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))).all() # 查询age是25 或者 `email`以`itheima.com`结尾的所有用户 from sqlalchemy import or_ User.query.filter(or_(User.age == 25, User.email.endswith("itheima.com"))).all() # 查询名字不等于wang的所有用户[2种方式] from sqlalchemy import not_ User.query.filter(not_(User.name == "wang")).all() User.query.filter(User.name != "wang").all() # 查询id为[1, 3, 5, 7, 9]的用户 User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all() # 所有用户先按年龄从小到大, 再按id从大到小排序, 取前5个 User.query.order_by(User.age, User.id.desc()).limit(5).all() # 分页查询, 每页3个, 查询第2页的数据 pn = User.query.paginate(2, 3) # pn.items 获取该页的数据 pn.page 获取当前的页码 pn.pages 获取总页数 ———————————————— 版权声明:本文为CSDN博主「Lucas__liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lb245557472/article/details/102684812
# 改
先把要更改的数据查询出来,
将要修改的值赋给title,
提交事务
result = Article.query.filter(Article.title == 'aaa').first() #将要修改的值赋给title resul.title = 'ccc' db.session.commit()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?