postgresql - Sqlalchemy 相交和除外
问题描述
有人知道如何将这些原始 SQL 查询转换为 sqlalchemy 吗?
new_records = db.session.execute('SELECT issn_l, issn FROM issn_temp EXCEPT SELECT issn_l, issn FROM issn_to_issnl;')
removed_records = db.session.execute('SELECT issn_l, issn FROM issn_temp INTERSECT SELECT issn_l, issn FROM issn_to_issnl;')
我的模型如下:
class ISSNTemp(db.Model):
__tablename__ = "issn_temp"
issn_l = db.Column(db.String(9), nullable=False, primary_key=True)
issn = db.Column(db.String(9), nullable=False, primary_key=True)
class ISSNToISSNL(db.Model):
__tablename__ = "issn_to_issnl"
issn_l = db.Column(db.String(9), nullable=False, primary_key=True)
issn = db.Column(db.String(9), nullable=False, primary_key=True)
created_at = db.Column(db.DateTime, default=datetime.datetime.utcnow)
我尝试使用联合,但效果不佳。
解决方案
我最近在附近构建了一个分层查询:
differential_select = union(
select( *( [ deltakey ] + sncolumns + [ literal( 'SN' ).label( 'op' ) ] ) ).except_(
select( *( [ deltakey ] + tncolumns + [ literal( 'SN' ).label( 'op' ) ] ) )
),
select(*( [ deltakey ] + tncolumns + [ literal( 'TN' ).label( 'op' ) ] ) ).except_(
select( *( [ deltakey ] + sncolumns + [ literal( 'TN' ).label( 'op' ) ] ) )
)
)
将此应用于您的第一个查询,我得到:
select(
issn_temp.c.issn_l,
issn_temp.c.issn
).except_(
select(
issn_to_issn.c.issn_l,
issn_to_issn.c.issn
)
)
其中 issn_temp 和 issn_to_issn 指向 sqlalchemy.Table 的实例。
推荐阅读
- omnet++ - 如何使用 3rd 方 dll (libaudiofile) 编译 INET
- php - created_at 列中的时间不正确 - Laravel 5.4
- amazon-web-services - 在 EC2 用户数据中运行 tmux
- python - openCV中的视频捕获是否使用ffmpeg?
- ios - 第一响应者成为/辞职在 PageViewController Swift 中不起作用
- php - 电子邮件激活将我带到另一个页面
- vue.js - 为什么不设置自动选择标签第一个选项?
- php - 如何将 BLOB 图像转换为在网页中显示
- reactjs - 带有 React 钩子的 react-native-fast-image 崩溃 onLoadEnd
- flutter - Flutter - 如何在 PageView 上进行延迟加载?