sqlalchemy文档--查询-定义表

本文介绍了如何使用Python的SQLAlchemy库进行数据库操作,包括定义数据模型、对象插入、查询技巧如简单查询、逻辑查询、排序分组等,以及数据更新和批量插入的方法。内容涵盖了ORM的基本用法和高级查询功能。
摘要由CSDN通过智能技术生成

一、定义表

继承base
class Notice(Base):
    __tablename__ = 'projectdb'
    # ID = models.BigIntegerField(primary_key=True)
继承db.Model
Column(String(255), primary_key=True)

"""

class User(UserMixin, db.Model):
    """定义用户模型"""
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(64), unique=True, index=True)
    password = db.Column(db.Integer, nullable=False)
    password = db.Column(db.DateTime, default=datetime.now())
    password = db.Column(db.Text)
    password = db.Column(db.Integer, db.ForeignKey('tablename.field', ondelete='CASCADE'))
    password = db.Column(db.Boolean)

二、添加对象

1、ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
session.add(ed_user)
session.commit()

2、回滚
session.rollback()

3、批量插入(忽略插入)
# players_list:[{}, {}]
ignoreInsert=BaseGamePlayerData.__table__.insert().prefix_with('IGNORE').values(players_list)
        session.execute(ignoreInsert)
        session.commit()
        session.close()

三、SQLAlchemy查询     

    1、简单查询

1、基本查询 
User.query.all() # 查询所有用户数据
User.query.count() # 查询有多少个用户
User.query.first() # 查询第1个用户
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()  # 复杂查询  使用恒等式等其他形式来设置条件

query.filter(User.name == 'ed') #equals
query.filter(User.name != 'ed') #not equals
query.filter(User.name.like('%ed%')) #LIKE
query.filter(User.name == None)#is None
query.filter(User.name != None)#not None

2、特殊查询 开头、包含、模糊查询
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()  模糊查询

3、between
User.query.filter(User.age.between(12, 23).all()

    2、逻辑查询:and 、in、or、not

1、in
uery.filter(User.name.in_(['ed','wendy', 'jack'])) #IN
query.filter(User.name.in_(session.query(User.name).filter(User.name.like('%ed%'))#IN
query.filter(~User.name.in_(['ed','wendy', 'jack']))#not IN

2、and_
query.filter(and_(User.name =='ed',User.fullname =='Ed Jones')) # and
query.filter(User.name == 'ed',User.fullname =='Ed Jones') # and
query.filter(User.name == 'ed').filter(User.fullname == 'Ed Jones')# and

3、or_
query.filter(or_(User.name =='ed', User.name =='wendy')) #or
query.filter(User.name.match('wendy')) #match

4、not_
User.query.filter(not_(User.name == "wang")).all()
User.query.filter(User.name != "wang").all()

   3、排序,分组,limit,分页,having,paginate

1、order_by 、limit
User.query.order_by(User.age, User.id.desc()).limit(5).all() # ID排序取5条

2、group_by、having
session.query(User.age,func.count(User.id)).group_by(User.age).all() # 按年纪分组
session.query(User.age,func.count(User.id))\
	.group_by(User.age).having(User.age < 18).all() 分组之后再筛选

3、paginate
pn = User.query.paginate(2, 3) # 分页查询, 每页3个, 查询第2页的数据
pn.items  获取该页的数据     pn.page   获取当前的页码     pn.pages  获取总页数

   4、返回的数量

query.filter(User.name == 'ed').all()
query.filter(User.name == 'ed').first()
query.filter(User.name == 'ed').one()
query.filter(User.name == 'ed').first().scalar()

   5、嵌套查询    

1、取指定ID数据  select * from table where field in (select field from table)
data = db.session.query(Koldouyu).filter(
Koldouyu.room_id.in_(db.session.query(Kollist.roomId).filter())).group_by(Koldouyu.room_id).all()

  6、聚合函数

1、sum、max、min
session.query(
    func.sum(models.Users.age), # 所有数相加的值
    func.max(models.Users.age), #最大值
    func.min(models.Users.age) #最小值
    func.avg(models.Users.age) # 均值
).first()

session.query(
    func.avg(models.Users.age) # 均值
).scalar() # 直接获取数据

四、更新、setattr(自定字段更新)

一、多条跟新
db.session.query(Member).filter(Member.team_id == team_id).update({Member.signed: 1})
db.session.commit()

二、查询
team_leader = db.session.query(Team).filter(Team.id == team_id, Team.team_leader_tag == team_leader_tag).first()
team_leader.signed = 1
db.session.commit()

三、自定字段更新
    场景(如 提前不知更新字段,flask接口参数传过来哪个字段就更新哪个字段)
    player = session.query()..
    setattr(player, field, value)
    session.commit()

四、in、notin
 update_stmt = EquipmentStatusReal.__table__.update().where(EquipmentStatusReal.equipment_id.in_(equipments)).values(status=1)
        update_stmt1 = EquipmentStatusReal.__table__.update().where(EquipmentStatusReal.equipment_id.notin_(equipments)).values(status=0)

        session.execute(update_stmt)
        session.execute(update_stmt1)
    

五、插入数据

        1、定义模型
class TestTable(Base):
    __tablename__ = 'test'
    id = Column(Integer, primary_key=True, autoincrement=True)
    age = Column(Integer)
    name = Column(String(255))
    roly = Column(String(255))
        2、批量插入数据
# 简历连接
Session = sessionmaker(bind=engine, autocommit=False)
session = Session()

# 批量数据
test_data = [{"age": 10, "name": "xiahon", "roly": "sd"}, {"age": 20, "name": "heihei", "roly": "打野"}]


1、普通的批量插入
session.execute(
            TestTable.__table__.insert(),
            test_data
        )
2、# IGNORE 批量忽略插入
ignoreInsert = TestTable.__table__.insert().prefix_with('IGNORE').values(test_data)
session.execute(ignoreInsert)

3、单条模型插入
one_data = TestTable(
    age=1,
    name="sd",
    roly="real_name"

)
session.add(one_data)

# 提交并关闭连接
session.commit()
session.close()

                

我是一只进击的程序狗,如果觉得对您有帮助,请给个关注个点赞,也可以添加我的公众号,不定期发布有趣内容。

Flask-SQLAlchemy一个基于Flask的Python Web开发框架,用于与SQLAlchemy集成的插件,可以轻松地在Flask应用程序中使用SQLAlchemy进行数据库操作。 以下是使用Flask-SQLAlchemy的基本步骤: 1. 安装Flask-SQLAlchemy 可以使用pip命令安装Flask-SQLAlchemy: ``` pip install Flask-SQLAlchemy ``` 2. 在Flask应用程序中配置数据库连接 在Flask应用程序中,需要配置数据库连接信息,例如: ``` from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/mydatabase' db = SQLAlchemy(app) ``` 以上代码中,'SQLALCHEMY_DATABASE_URI'是数据库连接的URL,可以根据自己的需要进行配置。在这个例子中,使用的是MySQL数据库。 3. 创建模型 在Flask-SQLAlchemy中,使用模型来示数据库。例如: ``` class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return '<User %r>' % self.username ``` 以上代码定义一个名为“User”的模型,一个用户对象,包含id、username和email三个属性。 4. 数据库迁移 在使用Flask-SQLAlchemy时,可以使用Flask-Migrate插件进行数据库迁移。具体的步骤可以参考Flask-Migrate的文档。 5. 数据库操作 使用Flask-SQLAlchemy进行数据库操作非常简单,例如: ``` # 添加一个用户 user = User(username='john', email='john@example.com') db.session.add(user) db.session.commit() # 查询所有用户 users = User.query.all() ``` 以上代码中,首先创建一个名为“john”的用户,然后将其添加到数据库中并提交。接着,查询所有的用户。 这就是使用Flask-SQLAlchemy的基本步骤,可以根据自己的需要进行配置和使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值