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.