I did use a plain session and set "bind" to either database as needed. It's
working fine.
Thank you.

On Fri, Dec 3, 2010 at 12:24 AM, Michael Bayer <mike...@zzzcomputing.com>wrote:

>
> On Dec 2, 2010, at 1:34 PM, gayatri wrote:
>
> > Hi All,
> >
> > I'm totally new to the usage of Sharding. I have just tried a sample
> > with sqlalchemy ShardedSession.
> >
> > I have two databases (old and new) created with a Projects table. I
> > have a global shardID that indicates which database to operate on.
> > shardID - 'n' - for new DB and
> > shardID - 'o' - for old DB
> >
> > With the initial shardID pointing to the new DB, I have programmed the
> > following steps.
> >
> > Added a record to Projects table, and queried it -- received back the
> > new DB record
> >
> > Changed the shardID to 'o'
> >
> > Added a record to Projects table, and queried it -- received back the
> > old DB record
> >
> > Changed the shardID to 'n'
> >
> > Queried Projects table - Here, as the shardID is pointing to the new
> > DB i should get records from the newDB projects table, whereas I'm
> > receiving the record from th old DB
> >
> > But, If I add another record to the Projects table before this step,
> > then the qury returns me the new DB records.
> >
> > Can anyone let me know the reason for this behaviour? Or is there any
> > mistake in the program?
> >
> > Below is the code which I have used:
>
> The core concept of horizontal sharding is that different records belong
> exclusively to one database node or another, which are blended together as
> results that are loaded from one or both nodes simultaneously based on
> rules.  Your approach below uses a global flag, meaning the session can only
> reference one shard at a time, so any query against the Session is only
> capable of returning results from one database at a time.    If you only
> want to look at one database at a time for all records, there's no reason to
> use ShardedSession, just use a plain session and set "bind" to either
> database as needed.
>
>
>
>
> >
> > #test_shard.py
> >
> > from sqlalchemy import create_engine
> > from sqlalchemy import Table, Column, Integer, String, MetaData
> > from sqlalchemy.orm import sessionmaker, mapper
> > from sqlalchemy.ext.horizontal_shard import ShardedSession
> >
> >
> > #code added to use sharding
> > shardID     =  'n'  #default
> > oldDBEngine = create_engine('sqlite:///:memory:')
> > newDBEngine = create_engine('sqlite:///:memory:')
> > DBSession   = sessionmaker(class_=ShardedSession)
> > DBSession.configure(shards={'o':oldDBEngine, 'n':newDBEngine})
> > metadata    = MetaData()
> >
> >
> > def shard_chooser(mapper, instance, clause=None):
> >    return shardID
> >
> > def id_chooser(query, ident):
> >    return shardID
> >
> > def query_chooser(query):
> >    return shardID
> >
> > # further configure create_session to use these functions
> > DBSession.configure(shard_chooser=shard_chooser,
> >                     id_chooser=id_chooser,
> >                     query_chooser=query_chooser)
> >
> >
> > projects_table = Table('projects', metadata,
> >                         Column('id', Integer, primary_key=True), #
> > primary key
> >                         Column('name', String(40)), # foreign key
> >                         Column('prefix', String(6))
> >                      )
> >
> > class Project(object):
> >    def __init__(self, name, prefix):
> >        self.name   = name
> >        self.prefix = prefix
> >
> > mapper(Project, projects_table)
> >
> >
> > # create tables
> > for dbEngine in (newDBEngine, oldDBEngine):
> >    metadata.drop_all(dbEngine)
> >    metadata.create_all(dbEngine)
> >
> >
> > ############################################ test_shard
> > session = DBSession()
> >
> > print "---------- add to new db with shardID", shardID #default
> > shardID in 'n' ponting to new database
> > p1_new = Project('p1_new', 'p1_v1_new')
> > session.add(p1_new)
> > session.commit()
> > print
> >
> > print "---------- get from new db with shardID", shardID
> > query    = session.query(Project)
> > projects = query.all()
> > for p in projects:
> >    print p.id, p.name, p.prefix
> > print
> >
> > shardID = 'o'
> > print "---------- add to old db with shardID", shardID
> > p1_old = Project('p1_old', 'p1_v1_old')
> > session.add(p1_old)
> > session.commit()
> > print
> >
> > print "---------- get from old db with shardID", shardID
> > query    = session.query(Project)
> > projects = query.all()
> > for p in projects:
> >    print p.id, p.name, p.prefix
> > print
> >
> >
> > shardID = 'n'
> >
> > ##print "---------- add to new db with shardID", shardID
> > ##p2_new = Project('p2_new', 'p2_v2_new')
> > ##session.add(p2_new)
> > ##session.commit()
> > ##print
> >
> > print "---------- get from new db with shardID", shardID
> > query    = session.query(Project)
> > projects = query.all()
> > for p in projects:
> >    print p.id, p.name, p.prefix
> >
> >
> > Thanks,
> > Gayatri
> >
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> > To post to this group, send email to sqlalch...@googlegroups.com.
> > To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@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 sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@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 sqlalch...@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.

Reply via email to