[sqlalchemy] different behavior with schema qualified tables in sqlite since 0.7.x

2011-09-16 Thread Victor Olex
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.



Re: [sqlalchemy] different behavior with schema qualified tables in sqlite since 0.7.x

2011-09-16 Thread Michael Bayer
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.