首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SqlAlchemy :我要筛选2个外键上的查询

SqlAlchemy是一个Python的SQL工具和对象关系映射(ORM)库,它提供了一种灵活且强大的方式来操作关系型数据库。它可以帮助开发者通过Python代码来执行SQL查询、插入、更新和删除操作,同时还提供了对数据库表和对象之间的映射,使得开发者可以使用面向对象的方式来操作数据库。

对于筛选两个外键上的查询,可以使用SqlAlchemy的查询语句和过滤器来实现。假设有两个表A和B,它们之间存在外键关系。以下是一个示例代码:

代码语言:txt
复制
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import and_

# 创建数据库引擎
engine = create_engine('数据库连接字符串')

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 定义表A和表B的模型类
class A(Base):
    __tablename__ = '表A'
    id = Column(Integer, primary_key=True)
    b_id = Column(Integer, ForeignKey('表B.id'))

class B(Base):
    __tablename__ = '表B'
    id = Column(Integer, primary_key=True)

# 查询同时满足两个外键的记录
query = session.query(A).join(B).filter(and_(A.b_id == B.id, A.b_id == 1))

# 执行查询并获取结果
results = query.all()

# 打印结果
for result in results:
    print(result.id)

# 关闭会话
session.close()

在上述示例中,我们首先创建了数据库引擎和会话,然后定义了表A和表B的模型类。接下来,我们使用session.query()方法创建一个查询对象,并使用join()方法将表A和表B连接起来。然后,使用filter()方法和and_()函数来添加过滤条件,即同时满足A表的b_id等于B表的id,并且b_id等于1。最后,使用all()方法执行查询并获取结果。

需要注意的是,上述示例中的数据库连接字符串、表名、字段名等需要根据实际情况进行修改。另外,SqlAlchemy还提供了许多其他的查询和过滤器方法,可以根据具体需求进行使用。

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云云服务器、腾讯云容器服务等。你可以通过访问腾讯云官方网站获取更详细的产品介绍和文档:腾讯云产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flask中ORM框架之SQLAlchemy插件入门到弃坑

答: 官方文档使用关系 relationship 进行 反向引用即级联查询,注意点他不是映射在数据库之中他实际是Django隐型属性; # 基础语法 反向引用名称 = db.relationship...描述:级联数据之外关系 1:1 ForeignKey + Unique 1:M ForeignKey M:N 额外扩充关系表即多个ForeignKey 基础实例: 1.反向引用模型构建...2.使用关系 relationship 进行反向引用即级联查询; # Day3\App\models.py # 例如以下数据库模型声明 class Animal(db.Model): __...# 使用插入数据 @d3.route('/add_fdog/') def add_fdog(): fdog = FDog() # 插入数据根据字段中值排序规则为倒序 fdog.fid...id=99 反向引用或者数据(列表对象): [, <FDog 13

3K10

python数据库操作mysql:pymysql、sqlalchemy常见用法详解

使用foregin_key创建 类中relationship作用:帮助ORM获知他们关系,以便ORM使用获取相关数据 relationship中backref用途:relationship...,为了避免ORM混淆多个relationship,特别的标注哪个是哪个relationship relationship中secondary用途:在多对多关系中,填入值是中间表,维持两边表关系...一对一关系: 1.导入模块:from sqlalchemy import Foreign_key 2.建立(如:group = Column(Integer,ForeignKey(“group.id...一对多关系,关联 以一个老师能做一个班班主任此外还能做另一个班副班主任为例【即一个老师能对应多个班级】 一对多关系创建核心是relationship中foreign_keys 附...:当你建表成功而插入数据失败时,可以尝试先删除掉数据表,有时候因为依赖会导致插入失败 #负责导入连接数据库对象 from sqlalchemy import create_engine from

3.5K10

Flask数据库过滤器与查询

# backref="role"可以让user对象有个role属性获得role中信息,这个不是必须添加,如果不添加那么user对象通过role_id获得这个用户角色信息 users...: 指数据查询集合 原始查询集: 不经过任何过滤返回结果为原始查询集 数据查询集: 将原始查询集经过条件筛选最终返回结果 查询过滤器: 过滤器 功能 cls.query.filter(...大多数情况下,db.relationship()都能自行找到关系中,但有时却无法决定把哪一列作为。...例如如果address模型中有两个或以上列定义为person模型SQLAlchemy就不知道该使用哪列。...下面列出常用过滤器,完整列表请参见SQLAlchemy官方文档: filter():把过滤器添加到原查询,返回一个新查询 filter_by():把等值过滤器添加到原查询,返回一个新查询

6.8K10

Python自动化开发学习12-Mari

主键: 主键是唯一。一个数据表中只能包含一个主键。你可以使用主键来查询数据。 用于关联两个表。 复合: 复合(组合)将多个列作为一个索引,一般用于复合索引。...查询关联,通过查看建表语句就能看到外SQL语句 > SHOW CREATE TABLE record; 然后被关联表可以用下面的语句查询到关联关系 > select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE...多表查询 下面是SQL中JOIN语句,这里SELECT * 就好了,我们可以用代码实现输出内容筛选。...关联 关联关系主要分三种情况:一对一、一对多/多对一、多对多 一对一 创建关联需要导入 from sqlalchemy import ForeignKey 下面是创建被关联时候用SQL语句...因为不需声明了ForeignKey才能使用join,貌似不存在左连接和右连接问题。有约束,其中一张表一定是所有的属性值都被另外一张表包含。 上面是查询,还可以通过关联对象来创建。

2.7K10

Python Web - Flask笔记6

ORM关系以及一对多: mysql级别的,还不够ORM,必须拿到一个表,然后通过这个再去另外一张表中查找,这样太麻烦了。...但是,如果数据项被设置为nullable=False时候,删除会报错。 ORM层面删除数据,会无视mysql级别的约束。直接会将对应数据删除,然后将从表中那个设置为NULL。...不用写多个sql语句就可以实现一些复杂查询。那么在sqlalchemy中,实现一个子查询,应该使用以下几个步骤: 1....在父查询中,如果想要使用子查询字段,那么可以通过子查询返回值c属性拿到。...操作这个session时候就跟之前sqlalchemysession是iyimoyiyang查询数据: 如果查找数据只是查找一个模型数据,那么可以通过模型.query方式进行查找。

1.9K10

什么是关系型数据库和非关系型数据库_常用三种关系型数据库

举一个例子,比如我现在有两个表单,一个叫A,一个叫B,而在A和B中,有好几个字段是相关联,如果这时候我们数据量很大,还进行极其频繁数据查询,数据库查询速度一定会慢下来。...它在名为ID字段下是不会重复,每行值与其他行值不会重复。 : 主要用于两个表直接关联....字段就叫做....可以看到,其实主键值就是在上一行主键值 +1 Mysql简单数据查询 我们已经了解了简单语句查询。 我们稍微生个级别。 比如我user_age 为18几行数据怎么办?...也就是说年龄18用户怎么筛选出来? 可以看到,我们用where user_age = 18 过滤出了我们需要数据。 继续升级,如果不要看到id 这个字段内容咋办?

4.7K10

Flask 入门系列教程(五)

URL 必须是保存在 Flask 对象 SQLALCHEMY_DATABASE_URI 中,配置对象中还有一个很有用选项,即 SQLALCHEMY_COMMIT_ON_TEARDOWN ,将其设为...这一属性可替代 role_id 访问 Role 模型,此时获取是模型对象,而不是值。 添加到 User 模型中 role_id 列被定义为,就是这个建立起了关系。...data.sqlite 数据库文件,并且有两个数据表 如果我们删除当前数据库,可以使用 db.drop_all() 在视图函数中操作数据库 下面我们就开始在视图函数中进行数据库操作,这才是最为重要...在查询应用指定过滤器后,通过调用 all() 执行查询,以列表形式返回结果。除了all() 之外,还有其他方法能触发查询执行。...最后最后,如果觉得文章给了你一些启发或者帮助,还请帮忙点个赞,给辛苦码字一点小小鼓励,谢谢!!

3.2K31

小白学Flask第十一天| flask-sqlalchemy数据库扩展包(一)

SQLALchemy实际是对数据库抽象,让开发者不用直接和SQL语句打交道,而是通过Python对象来操作数据库,在舍弃一些性能开销同时,换来是开发效率较大提升。...首先关于数据库安装,相信在这里不必多说,这里使用是mysql数据库,如何安装?请大家自行百度。 在前面也提到了flask-sqlalchemy这个扩展。...数据库连接通过URL指定,而且程序使用数据库必须保存到Flask配置对象SQLALCHEMY_DATABASE_URI中,就例如下面这样: app.config['SQLALCHEMY_DATABASE_URI...role_id = db.Column(db.Integer, db.ForeignKey('role_id')) 添加到user模型中role_id列被定义成,就是这个建立起列关系。...通过User实例这个属性可以获得对应Role模型对象,而不用再通过role_id获取。

2.6K30

带你认识 flask 中数据库

Flask-SQLAlchemy有助于实现这两种查询。 让我们扩展数据库来存储用户动态,以查看实际中关系。...你已经看到所有用户都有一个唯一id主键, 将用户动态链接到其作者方法是添加对用户id引用,这正是user_id字段所在位置。这个user_id字段被称为。...上面的数据库图显示了作为该字段和它引用id字段之间链接。这种关系被称为一对多,因为“一个”用户写了“多”条动态。...这可以确保你使用统一时间戳,无论用户位于何处,这些时间戳会在显示时转换为用户的当地时间。 user_id字段被初始化为user.id,这意味着它引用了来自用户表id值。...SQLAlchemy在这方面非常出色,因为它提供了对关系和高级抽象。

2.2K20

Day24访问数据库

在使用SQLite前,我们先要搞清楚几个概念: 表是数据库中存放关系数据集合,一个数据库里面通常都包含多个表,比如学生表,班级表,学校表,等等。表和表之间通过关联。...技术:Object-Relational Mapping,把关系数据库表结构映射到对象。...SQLAlchemy提供查询接口如下: # 创建Session: session = DBSession() # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用...由于关系数据库多个表还可以用实现一对多、多对多等关联,相应地,ORM框架也可以提供两个对象之间一对多、多对多等功能。...book表是通过关联到user表: user_id = Column(String(20), ForeignKey('user.id')) 当我们查询一个User对象时,该对象books

1.7K40

Flask入门到放弃(四)—— 数据库

在准备把数据写入数据库前,先将数据添加到会话中然后调用 commit() 方法提交会话。 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。...常用SQLAlchemy查询过滤器 过滤器 说明 filter() 把过滤器添加到原查询,返回一个新查询 filter_by() 把等值过滤器添加到原查询,返回一个新查询 limit() 使用指定值限定原查询返回结果...) 查询课程所属讲师 course = Course.query.get(2) print(course) # 根据只能查询到ID数值, SQLAlchemy不会帮我们把ID转换成模型 print...( course.teacher_id ) # 获取对应模型数据,需要找到主键模型里面的 db.relationship 里面的 backref print( course.teacher.name...'] = db # SQLAlchemy对象 app.config['SESSION_SQLALCHEMY_TABLE'] = 'session' # session保存表名称 app.config

3K20

Python Web - Flask笔记5

用这个Base类作为基类来写自己ORM类。定义__tablename__类属性,来指定这个模型映射到数据库中表名。...例如,存,6位整数,4位小数:Column(DECIMAL(10, 4)),如果插入数据时候数据不在改范围内,报错。 Enum:枚举类型。...和四种约束 使用SQLAlchemy创建非常简单。在从表中增加一个字段,指定这个字段是哪个表哪个字段就可以了。从表中外字段,必须和父表主键字段类型保持一致。...nullable=False) content = Column(Text,nullable=False) uid = Column(Integer,ForeignKey("user.id")) 约束有以下几项...注意:字段属性不能有nullable=False id = Column(Integer, ForeignKey("user.id", ondelete="RESTRICT")) 注:如果要使用,则数据库引擎必须为

1K10

python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy

面向对象是从软件工程基本原则(如耦合、聚合、封装)基础发展起来,而关系数据库则是从数学理论发展而来,两套理论存在显著区别。为了解决这个不匹配现象,对象关系映射技术应运而生。   ...VARCHAR(32), 4 password VARCHAR(64), 5 PRIMARY KEY (id) 6 ) 这只是最简单sql表,如果再加上关联什么,一般程序员脑容量是记不住那些...相当于原生sql为: SELECT count(user.name) AS count_1, user.name AS user_name FROM user GROUP BY user.name ---- 关联多对一...32 postal_code = Column(Integer) 33 user_id = Column(Integer, ForeignKey('user.id')) # ...user_obj.append(obj) 57 session.add_all(user_obj) 58 session.commit() 59 60 # addresses表中插入数据,这里指定关联

2.3K10
领券