SQLAlchemy temporary table with Declarative Base

orm, python, sqlalchemy, temporary

Solution

Is it possible to use `__table_args__`? See https://docs.sqlalchemy.org/en/14/orm/declarative_tables.html#orm-declarative-table-configuration

class Tempo(Base):
    """
    Class for temporary table used to process data coming from xlsx
    @param Base Declarative Base
    """

    # TODO: make it completely temporary

    __tablename__ = 'tempo'
    __table_args__ = {'prefixes': ['TEMPORARY']}

    drw = alc.Column(alc.String)
    date = alc.Column(alc.Date)
    check_number = alc.Column(alc.Integer)

Problem

I need a temporary table in my programme. I have seen that this can be achieved with the "mapper" syntax in this way: ``` t = Table( 't', metadata, Column('id', Integer, primary_key=True), # ... prefixes=['TEMPORARY'], ) ``` Seen here But, my whole code is using the declarative base, it is what I understand, and I would like to stick to it. There is the possibility of using a hybrid approach but if possible I'd avoid it. This is a simplified version of how my declarative class looks like: ``` import SQLAlchemy as alc class Tempo(Base): """ Class for temporary table used to process data coming from xlsx @param Base Declarative Base """ # TODO: make it completely temporary __tablename__ = 'tempo' drw = alc.Column(alc.String) date = alc.Column(alc.Date) check_number = alc.Column(alc.Integer) ``` Thanks in advance! EDITED WITH THE NEW PROBLEMS: Now the class looks like this: ``` import SQLAlchemy as alc class Tempo(Base): """ Class for temporary table used to process data coming from xlsx @param Base Declarative Base """ # TODO: make it completely temporary __tablename__ = 'tempo' __table_args__ = {'prefixes': ['TEMPORARY']} drw = alc.Column(alc.String) date = alc.Column(alc.Date) check_number = alc.Column(alc.Integer) ``` And when I try to insert data in this table, I get the following error message: ``` sqlalchemy.exc.OperationalError: (OperationalError) no such table: tempo u'INSERT INTO tempo (...) VALUES (?, ?, ?, ?, ?, ?, ?, ?)' (....) ``` It seems the table doesn't exist just by declaring it. I have seen something like create_all() that might be the solution for this (it's funny to see how new ideas come while explaining thoroughly) Then again, thank you very much!

Original source

Related problems