OK what's changed with SQLite is that file-based databases no longer use a pool - NullPool is used by default. So below, if you want some kind of scope to remain for the life of the Engine you'd need to switch it back to SingletonThreadPool - however, what would be better is to procure a Connection from the Engine, then do everything with the Connection (i.e. metadata.create_all(conn)). Since if you really want some scope declared on a single SQLite connection that's what you'd need to do in any case.
On Sep 16, 2011, at 11:37 AM, Victor Olex wrote: > Something's changed with sqlite since 0.6. Once a sqlite engine is > created to a physical file the usual workaround for schema change does > not work. It works correctly on sqlite in memory and even when > reattaching from memory to a file. > > from sqlalchemy import Column, Sequence, create_engine, Integer > from sqlalchemy.ext.declarative import declarative_base > import os > > Base = declarative_base() > metadata = Base.metadata > > class A(Base): > __tablename__ = 'A' > __table_args__ = {'schema':'S'} > id = Column(u'ID', Integer, Sequence('A_PK'), primary_key=True) > > e = create_engine('sqlite://', echo=True) > e.execute("attach database 'test.db' as S;") > metadata.bind = e > metadata.create_all() # all good > > e = create_engine('sqlite:///test.db', echo=True) > e.execute("attach database 'test.db' as S;") > metadata.bind = e > metadata.create_all() # OperationalError: (OperationalError) unknown > database "S" 'PRAGMA "S".table_info("A")' () > os.remove('test.db') > > # the work-around I came up with > e = create_engine('sqlite://', echo=True) > e.execute("attach database 'test.db' as S;") > metadata.bind = e > metadata.create_all() # works fine again, tables were created in file > > Previously (ver. 0.6), the OperationalError would not occur. Neither > SQLite nor pysqlite version have changed. > > -- > Victor Olex > http://linkedin.com/in/victorolex > http://twitter.com/agilevic > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalchemy@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.