使sqlalchemy不在提交时删除(或截断)临时表

时间:2015-12-15 23:16:02

标签: python sql postgresql sqlalchemy

我正在尝试创建然后使用sqlalchemy在postgres中使用临时表。我想使用'Temporary'前缀创建表my_table,然后将其提交到数据库,这样我就可以在同一个会话中再次使用它。

from sqlalchemy import Column, Integer, Table

my_table = Table('my_temp_table', metadata,
    Column('id', Integer, primary_key=True),
    prefixes=['TEMPORARY'])

my_table.create(session.bind)
session.commit() # required to access the table

但是当我在同一个会话中查询该表时

session.query(my_table).filter(my_table.id == 2).all()

该表格不再存在。

我知道有一个'ON COMMIT'选项可以在创建临时表时设置,当设置为'PRESERVE ROWS'时,不应该删除(或截断)表。

http://www.postgresql.org/docs/9.2/static/sql-createtable.html

默认情况下,ON COMMIT应设置为postgres中的PRESERVER ROWS,但该表仍然被删除。

在sqlalchemy中有没有办法创建一个ON COMMIT设置为PRESERVE ROWS的临时表?

1 个答案:

答案 0 :(得分:3)

尝试使用postgresql_on_commit参数,该参数是Postgresql特定于方言的构造,用于创建表格。即:

my_table = Table('my_temp_table', metadata,
    Column('id', Integer, primary_key=True),
    prefixes=['TEMPORARY'],
    postgresql_on_commit='PRESERVE ROWS')

然而,仔细查看my_table.create()来电,我认为您试图通过session.get_bind()代替session.bind

最好的问候。