gpt4 book ai didi

postgresql - SQLAlchemy 核心 CREATE TEMPORARY TABLE AS

转载 作者:行者123 更新时间:2023-11-29 11:35:21 27 4
gpt4 key购买 nike

我正在尝试在 SQLAlchemy Core 中使用 PostgreSQL CREATE TEMPORARY TABLE foo AS SELECT... 查询。我查看了文档,但没有找到执行此操作的方法。

我有一个 SQLA 语句对象。如何根据其结果创建临时表?

最佳答案

这是我想出来的。请告诉我这是否是错误的方法。

from sqlalchemy.sql import Select
from sqlalchemy.ext.compiler import compiles


class CreateTableAs(Select):
"""Create a CREATE TABLE AS SELECT ... statement."""

def __init__(self, columns, new_table_name, is_temporary=False,
on_commit_delete_rows=False, on_commit_drop=False, *arg, **kw):
"""By default the table sticks around after the transaction. You can
change this behavior using the `on_commit_delete_rows` or
`on_commit_drop` arguments.

:param on_commit_delete_rows: All rows in the temporary table will be
deleted at the end of each transaction block.
:param on_commit_drop: The temporary table will be dropped at the end
of the transaction block.
"""
super(CreateTableAs, self).__init__(columns, *arg, **kw)

self.is_temporary = is_temporary
self.new_table_name = new_table_name
self.on_commit_delete_rows = on_commit_delete_rows
self.on_commit_drop = on_commit_drop


@compiles(CreateTableAs)
def s_create_table_as(element, compiler, **kw):
"""Compile the statement."""
text = compiler.visit_select(element)
spec = ['CREATE', 'TABLE', element.new_table_name, 'AS SELECT']

if element.is_temporary:
spec.insert(1, 'TEMPORARY')

on_commit = None

if element.on_commit_delete_rows:
on_commit = 'ON COMMIT DELETE ROWS'
elif element.on_commit_drop:
on_commit = 'ON COMMIT DROP'

if on_commit:
spec.insert(len(spec)-1, on_commit)

text = text.replace('SELECT', ' '.join(spec))
return text

关于postgresql - SQLAlchemy 核心 CREATE TEMPORARY TABLE AS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19053014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com