目前,我很难找到一种方法来减少由JOIN急切加载产生的多余的SQLAlchemy子句。我目前正在查询TableA,它急切地加载TableB,TableB急切地加载TableC。
我的查询还涉及到TableB和TableC的显式连接,以便对这些表的列进行筛选。但是,它生成详细的SQL,如以下所示:
SELECT * FROM TableA
JOIN TableB ON TableA.fk == TableB.id
JOIN TableC ON TableB.fk == TableC.id
LEFT
这是我的SQL设置
create table a
(
id serial primary key,
ta text
);
create table b
(
id serial primary key,
tb text,
aid integer references a(id) not null
);
Python:
import sqlalchemy as sa
import sqlalchemy.orm
connection_url = "..."
架构
class Parent:
relationship(ChildA) #One-to-Many
relationship(ChildB, lazy="joined") #One-to-Many
relationship(ChildC, lazy="joined") #One-to-Many
class ChildA:
parent_id
array_of_enums
id
class ChildB:
parent_id
class ChildC:
如果我指定了joinedload选项,SQLAlchemy可以立即加载集合的内容。但是,在这种情况下,我实际上对集合的内容并不感兴趣,只对其中的元素数量感兴趣。
是否可以让SQLAlchemy作为查询的一部分急切地获取集合的大小?
例如,假设我有这样的结构(真实的例子很长)
class Person:
name = Column(String)
avatarUrl = Column(String)
comments = relation(Comment)
class Wall:
Person for_whom
class Comment
commenter = rela
我试图在SQLAlchemy中找到正确的连接查询设置,但我似乎无法理解它。
我有下面的表设置(简化了,省略了非必要的字段):
class Group(db.Model):
id = db.Column(db.Integer, primary_key = True)
number = db.Column(db.SmallInteger, index = True, unique = True)
member = db.relationship('Member', backref = 'groups&
您好,我想做一个过滤器与我的查询使用联合加载。但我似乎不能让它工作。下面是我的示例查询
result = (
session.query(Work).
options(
joinedload(Work.company_users).
joinedload(CompanyUser.user)
).
filter(Work.id == 1).
filter(User.first_name == 'The name'). <<--- I can
我有一对具有基本父母/孩子关系的模型。这个孩子有一个字段foo。我想要做一个SQLAlchemy查询,它将返回所有具有foo匹配条件的子对象的父对象。和那些父母一样,我想把孩子们送回去,但前提是他们符合过滤标准。
这些是我的模型:
class Parent(Model):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
children = relationship('Child', backref='parent')
class Child
鉴于以下关系:
- 1 MasterProduct parent -> many MasterProduct children
- 1 MasterProduct child -> many StoreProducts
- 1 StoreProduct -> 1 Store
我在SQLAlchemy中定义了以下声明式模型:
class MasterProduct(Base):
__tablename__ = 'master_products'
id = Column(Integer, primary_key=True)
pid = Co
我第一次使用sqlalchemy,在读取查询结果时有一个意想不到的行为。
假设这些是我的数据库模型:
class Parent(Base):
__table__ = "parents"
id = Column(Integer, primary_key=True)
children = relationship("Child", back_populates="parent")
class Child(Base):
__table__ = "children"
id = Column(Int
我都快被这事搞疯了。我有一个使用SQLAlchemy的Flask应用程序。我想做一个我认为非常简单的查询:
SELECT * FROM event e
LEFT JOIN event_data ed on e.id = ed.event_id
WHERE ed.datetime > '2018-12-01'
这是我的模型
class Event(db.Model):
__tablename__ = 'event'
id = db.Column(db.Integer, primary_key=True)
# ... many fi
我有一个简单的新闻应用程序,用户可以看到最新的帖子,他们可以喜欢其中的一些帖子。 模型: from sqlalchemy.orm import relationship, backref
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String, nullable=False)
...
class Post(db.Model):
id = db.Column(db.Integer
为什么此查询获取的日期超出getting ()的范围。我正在试着订一张指定日期的机票和他们的票。
例如:
print start
2015-04-17T00:00
print end
2015-04-17T23:59
查询:
planes = Plane.query.filter(Booking.start_date.between(start, end))
for p in planes:
plane = p.as_dict()
bookings = []
for b in p.bookings:
booking = b.as_dict()
我正在尝试理解是否可以使用Sqlalchemy做一些事情,或者我是否以错误的方式思考它。举个例子,假设我有两个(这些只是例子)类:
class Customer(db.Model):
__tablename__ = 'customer'
id = Column(Integer, primary_key=True)
name = Column(String)
addresses = relationship('Address')
class Address(db.Model):
__tablename__ = 'a