带有Declarative Base的SQLAlchemy临时表

bgu*_*ach 9 python orm sqlalchemy temporary

我的程序中需要一个临时表.我已经看到这可以通过这种方式使用"mapper"语法实现:

t = Table(
    't', metadata,
    Column('id', Integer, primary_key=True),
    # ...
    prefixes=['TEMPORARY'],
)
Run Code Online (Sandbox Code Playgroud)

看到这里

但是,我的整个代码都使用了声明性基础,这是我所理解的,我想坚持下去.有可能使用混合方法, 但如果可能的话我会避免它.

这是我的声明性类的简化版本:

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)
Run Code Online (Sandbox Code Playgroud)

提前致谢!

编辑新问题:

现在这个类看起来像这样:

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)
Run Code Online (Sandbox Code Playgroud)

当我尝试在此表中插入数据时,我收到以下错误消息:

sqlalchemy.exc.OperationalError: (OperationalError) no such table:
tempo u'INSERT INTO tempo (...) VALUES (?, ?, ?, ?, ?, ?, ?, ?)' (....)
Run Code Online (Sandbox Code Playgroud)

似乎表只是通过声明而不存在.我见过像create_all()这样的东西可能是解决方案(看到新的想法如何在彻底解释时很有趣)

再说一次,非常感谢你!

vic*_*vic 5

可以使用__table_args__吗?见http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative.html#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)
Run Code Online (Sandbox Code Playgroud)