我正在尝试创建然后使用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的临时表?
答案 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
最好的问候。