OK you can also use @compiles on top of CreateTable to get directly at that 
process.


On Nov 22, 2013, at 4:34 PM, Gombas, Gabor <[email protected]> 
wrote:

> That works, thanks. Currently, I'm using __declare_last__() to modify 
> __table__.schema (SQLite) or __table__._prefixes (Oracle, PostgreSQL), once 
> the dialect is known. For the latter two I'm also monkey-patching 
> post_create_table(), which seemed easier to do than to completely 
> re-implement table creation, even if it does not look that nice.
> 
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Michael Bayer
>> Sent: 22 November 2013 16:17
>> To: [email protected]
>> Subject: Re: [sqlalchemy] SQLite temporary tables
>> 
>> 
>> On Nov 22, 2013, at 6:24 AM, Gombas, Gabor
>> <[email protected]> wrote:
>> 
>>> Hi,
>>> 
>>> How should one create SQLite temporary tables using SQLAlchemy? The
>> following does not work:
>>> 
>>>     from sqlalchemy import create_engine, Column, String
>>>     from sqlalchemy.ext.declarative import declarative_base
>>>     from sqlalchemy.orm import sessionmaker
>>>     from sqlalchemy.schema import CreateTable
>>> 
>>>     Base = declarative_base()
>>> 
>>>     class TempTest(Base):
>>>         __tablename__ = 'temp_test'
>>>         __table_args__ = {'schema': 'temp'}
>>>         name = Column(String, primary_key=True)
>>> 
>>>     engine = create_engine('sqlite:////tmp/testdb', echo=True)
>>>     Session = sessionmaker(bind=engine)
>>>     session = Session()
>>> 
>>> 
>>      TempTest.__table__.create(session.bind.execution_options(autoco
>> mmit=False))
>>>     session.add(TempTest(name='foo'))
>>>     session.flush() # Fails
>>> 
>>> Although I see the "CREATE TABLE" being emitted, INSERT fails saying the
>> table does not exist. If instead of calling TempTest.__table__.create() I use
>> the underlying DBAPI connection, then I can make it work, but it's ugly:
>> 
>> you use create() but use the session's current transaction-bound connection:
>> 
>> TempTest.__table__.create(session.connection())
>> 
>> I'm assuming you're using @compiles somewhere to get the "TEMPORARY"
>> syntax in there.
>> 
> 
> 
> 
> --------------------------------------------------------------------------------
> 
> NOTICE: Morgan Stanley is not acting as a municipal advisor and the opinions 
> or views contained herein are not intended to be, and do not constitute, 
> advice within the meaning of Section 975 of the Dodd-Frank Wall Street Reform 
> and Consumer Protection Act. If you have received this communication in 
> error, please destroy all electronic and paper copies and notify the sender 
> immediately. Mistransmission is not intended to waive confidentiality or 
> privilege. Morgan Stanley reserves the right, to the extent permitted under 
> applicable law, to monitor electronic communications. This message is subject 
> to terms available at the following link: 
> http://www.morganstanley.com/disclaimers. If you cannot access these links, 
> please notify us by reply message and we will send the contents to you. By 
> messaging with Morgan Stanley you consent to the foregoing.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to