- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 SQLAlchemy 中使用外键引用进行继承时遇到了困难。
我有一个drives
表格看起来像这样 id
作为主键:
Column | Type | Collation | Nullable | Default
---------------+-----------------------+-----------+----------+------------------------------------
id | integer | | not null | nextval('drives_id_seq'::regclass)
model | integer | | not null |
我还有另一个表,名为 smart
看起来像这样 <ts, drive>
作为主键和 drive
是一个外键引用 drives.id
:
Column | Type | Collation | Nullable | Default
---------------+-----------------------+-----------+----------+------------------------------------
drive | integer | | not null | nextval('drives_id_seq'::regclass)
ts | timestamp without timezone | | not null |
value | integer | | |
我有以下类定义来表示上面的表。
class Drives(Base):
__tablename__ = 'drives'
id = Column('id', Integer, primary_key=True)
model = Column('model', String)
class Smart(Base):
___tablename__ = 'smart'
drive = Column('drive', Integer, ForeignKey=Drives.id)
ts = Column('ts', TIMESTAMP)
value = Column('value', Integer)
drives = relationship('Drives')
# I would like something like the following to work, but I get an AttributeError for `model`
__mapper_args__ = {'primary_key': [ts, drive], 'polymorphic_on': drives.model}
我想创建两个派生类 ModelASmart
或ModelBSmart
哪里smart.value
根据 drive
对应的模型,有不同的解释.
class ModelASmart(Smart):
__mapper_args__ = {'polymorphic_identity': 'ModelA', 'primary_key': [Smart.ts, Smart.drive]}
@hybrid_property
def actual_value(self):
return self.value * 2
class ModelBSmart(Smart):
__mapper_args__ = {'polymorphic_identity': 'ModelB', 'primary_key': [Smart.ts, Smart.drive]}
@hybrid_property
def actual_value(self):
return self.value * 3
我的问题:如何引用另一个表( model
)中的列( drives
)作为主表 smart
中的鉴别器?
最佳答案
您可以使用column_property
属性使模型
“本地”到智能
,但代价是具有相关子查询:
class Drives(Base):
__tablename__ = 'drives'
id = Column(Integer, primary_key=True)
model = Column(String)
class Smart(Base):
__tablename__ = 'smart'
drive = Column(Integer, ForeignKey(Drives.id), primary_key=True)
ts = Column(DateTime, primary_key=True)
value = Column(Integer)
drives = relationship(Drives)
model = column_property(select([Drives.model]).where(Drives.id == drive))
__mapper_args__ = {'polymorphic_on': model}
class ModelASmart(Smart):
__mapper_args__ = {'polymorphic_identity': 'ModelA'}
@hybrid_property
def actual_value(self):
return self.value * 2
class ModelBSmart(Smart):
__mapper_args__ = {'polymorphic_identity': 'ModelB'}
@hybrid_property
def actual_value(self):
return self.value * 3
列属性将始终包含在您的查询中,这意味着相关子查询可能会决定查询性能。
SQLAlchemy 还有其他方式在关系上引入属性,例如 association proxies和混合属性,但这些不能用作 polymorphic_on
鉴别器。另一种更奇特的可能性是 map Smart
over a join在智能
和驱动器
表之间。
另一种选择是放弃使用继承,并在 Smart
上使用普通混合属性:
class Drives(Base):
__tablename__ = 'drives'
id = Column(Integer, primary_key=True)
model = Column(String)
class Smart(Base):
__tablename__ = 'smart'
drive = Column(Integer, ForeignKey(Drives.id), primary_key=True)
ts = Column(DateTime, primary_key=True)
value = Column(Integer)
drives = relationship(Drives)
_model_coeff = {
'ModelA': 2,
'ModelB': 3,
}
@hybrid_property
def actual_value(self):
return self.value * self._model_coeff[self.drives.model]
@actual_value.expression
def actual_value(cls):
return cls.value * case(
cls._model_coeff,
value=select([Drives.model]).
where(Drives.id == cls.drive).
as_scalar())
这使用 "shorthand" format case()
将查找 dict
映射到 SQL CASE
表达式。查询例如:
session.query(Smart, Smart.actual_value)
将使用相关子查询在系数之间进行选择,但还有另一种选择以及使用预先加载:
session.query(Smart).options(joinedload(Smart.drives, innerjoin=True))
这样,相关的 Drives
实例就会在同一查询中加载,因此混合属性在实例上访问时不需要执行提取:
# `s` is an instance from the previous eager loading query. This access
# will not fire additional queries.
s.actual_value
关于python - SQL Alchemy 中的外键和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54913197/
我已经开始使用炼金术 API,但我想知道是否是否有任何科学出版物解释用于从文本中提取关键字和概念的模型? 也是根据这个回答Is there way to influence AlchemyAPI se
我正在 SQLAlchemy 中寻找一种方法来进行批量处理 INSERT其行是查询的结果。我知道 session 具有功能 add它可用于添加单个对象,但我似乎无法找到它如何与子查询一起使用。 我知道
在使用 Alchamy 的实体 API 时收到“截断过大文本内容”的警告 - 有谁知道字符限制 - 我在他们的支持页面上找不到。 最佳答案 文本限制为50kb,在this page的底部有点隐藏. 关
我在 SQLAlchemy 中使用外键引用进行继承时遇到了困难。 我有一个drives表格看起来像这样 id作为主键: Column | Type |
我正在使用 alchemy 来编译 C 代码。 这就是我编译的方式 gcc oggvorbis.c -O3 -Wall -swc oggvorbis.swc -lvorbis 我收到错误 llvm-g
我尝试将 Alchemy NLP API 实现到我的 Android 项目中,但是我遇到了一些困难。从http://www.alchemyapi.com/developers/sdks/下载SDK时你
我似乎一辈子都无法安装 whoosh alchemy。引用:http://pythonhosted.org/Flask-WhooshAlchemy/ .不管怎样,我在关注http://blog.mig
我将 SQL Alchemy 的声明式风格与 PostgreSQL 数据库结合使用。我有一个管理 Claim 对象的 ClaimAccount 。像这样的东西: class Claim(MyBase)
我有用户模型,描述如下:- class User(db.Model, object): __tablename__ = "users" id = db.Column(db.Intege
我有一个这样定义的模型: class Article(db.Model): id = db.Column(db.Integer, primary_key=True) authors =
我是 python 和 SQLALCHEMY 的新手,我遇到了这个疑问,我们是否可以根据同一表列的单元格值过滤表的行。示例: Sbranch=value result=Transaction.quer
假设我得到一个这样的模型实例: instance = session.query(MyModel).filter_by(id=1).first() 如何删除该行?有没有特殊的调用方法? 最佳答案 好的
我打算制作一个 AIR 应用程序,但我需要执行一个外部应用程序,并且由于 Adobe AIR 中的安全限制......我在想为什么不尝试通过编写一些 C 代码来绕过它来执行类似 System 的操
我们当前的项目在很大程度上依赖于 SQL Alchemy 来创建表/插入数据。我们想切换到 timescaledb 的超表,但似乎推荐的创建超表的方法是执行 create_hypertable 命令。
我创建了以下方法来使用 SQL Alchemy 和 Pyodbc 连接到 SQL Server。 def getDBEngine(server, database): Params = url
我是 sql alchemy 的新手,我想计算表中的唯一行数,并输出唯一行以及该行的副本数。假设我有一个这样的表 Table A -------------- id address 现在我想获取该表的
我是 stackoverflow 新手。 我目前正在开发一个 WebSocket 项目,并使用一个名为 Alchemy-Websockets 的组件。 我的问题是当我尝试像这样使用 Alchemy.W
我是 sql alchemy 的新手,我想计算表中的唯一行数,并输出唯一行以及该行的副本数。假设我有一个这样的表 Table A -------------- id address 现在我想获取该表的
我们想在 sql alchemy 类上申请权限。我们有一个表,其中包含用户可以访问的映射。 创建表访问 ( 用户名 varchar(256), 策略 ID 整数 ) 我们的大多数表都包含 strate
我有以下场景 partner = query().filter(Partners.id == partner_id).first() if partner != None: partner.c
我是一名优秀的程序员,十分优秀!