Thread: [SQLObject] simultaneous conection to 2 different databases
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: P. J. <pet...@tp...> - 2008-02-05 19:55:40
|
Hi, I have not clue how to realize simultaneous conection for two different databases in one script. For example: 1) db_filename = '/opt/firebird/examples/empbuild/automat.fdb' connection_string = 'firebird://127.0.0.1:3050/' + db_filename connection = connectionForURI(connection_string) sqlhub.processConnection = connection 2) connection = connectionForURI('sqlite:///work/mincovnik.db') sqlhub.processConnection = connection thanks for your comments. Petr Jakes |
From: Oleg B. <ph...@ph...> - 2008-02-05 20:00:37
|
On Tue, Feb 05, 2008 at 08:55:35PM +0100, Petr Jake?? wrote: > Hi, > I have not clue how to realize simultaneous conection for two different > databases in one script. > > For example: > > 1) > db_filename = '/opt/firebird/examples/empbuild/automat.fdb' > connection_string = 'firebird://127.0.0.1:3050/' + db_filename > connection = connectionForURI(connection_string) > sqlhub.processConnection = connection > > 2) > connection = connectionForURI('sqlite:///work/mincovnik.db') > sqlhub.processConnection = connection You cannot do this with sqlhub. You have to pass the second connection as the connection parameter to all SQLObject methods: connection2 = connectionForURI('sqlite:///work/mincovnik.db') ATable.select(clause, connection=connection2) Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: P. J. <pet...@tp...> - 2008-02-05 21:27:09
|
You cannot do this with sqlhub. You have to pass the second connection > as the connection parameter to all SQLObject methods: > > connection2 = connectionForURI('sqlite:///work/mincovnik.db') > ATable.select(clause, connection=connection2) > > Oleg. So you mean it is OK to crate table object using: db_filename = 'c|\\Program Files\\Firebird\\Firebird_2_0\\examples\\empbuild\\automat.fdb' connection_string = 'firebird://127.0.0.1:3050/' + db_filename connection = connectionForURI(connection_string) sqlhub.processConnection = connection connection2 = connectionForURI('sqlite:///work/mincovnik.db') and than creating tables like: - MyTable1.createTable(ifNotExists=True) I mean: if not definning the connection, tables will be creted using connection from the sqlhub - MyTable2.createTable(ifNotExists=True, connection=connection2) I mean: if connection is defined, than the table will be created using specified connection And after that, it is not necessary to take care about the connection in the rest of the code? Petr |
From: Oleg B. <ph...@ph...> - 2008-02-05 21:37:29
|
On Tue, Feb 05, 2008 at 10:27:05PM +0100, Petr Jake?? wrote: > So you mean it is OK to crate table object using: > > db_filename = 'c|\\Program > Files\\Firebird\\Firebird_2_0\\examples\\empbuild\\automat.fdb' > connection_string = 'firebird://127.0.0.1:3050/' + db_filename > connection = connectionForURI(connection_string) > sqlhub.processConnection = connection > > connection2 = connectionForURI('sqlite:///work/mincovnik.db') > > and than creating tables like: > > - MyTable1.createTable(ifNotExists=True) > I mean: if not definning the connection, tables will be creted using > connection from the sqlhub > > - MyTable2.createTable(ifNotExists=True, connection=connection2) > I mean: if connection is defined, than the table will be created using > specified connection Yes. And you don't need to redecalre tables - if MyTable and MyTable2 are realy the same table - just do MyTable.createTable(ifNotExists=True, connection=connection2) > And after that, it is not necessary to take care about the connection in the > rest of the code? No, after that there are many different calls to pass connection2 to. Of course if MyTable and MyTable2 are really two different tables and every one of them are in two different databases you just set connection2 to be the default connection for MyTable2: MyTable2.setConnection(connection2) and forget about connections. But if you want to copy data between two identical tables in two different databases - you have to pass connection2 to all methods you call: for row in MyTable.select(connection=connection2): new_row = MyTable(**row.asDict()) The loop draws row from the second DB and inserts them into the first DB. To do this in the opposite directtion: for row in MyTable.select(): new_row = MyTable(connection=connection2, **row.asDict()) Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: P. J. <pet...@tp...> - 2008-02-05 21:53:03
|
> > Yes. And you don't need to redecalre tables - if MyTable and MyTable2 > are realy the same table - just do > > MyTable.createTable(ifNotExists=True, connection=connection2) > > > And after that, it is not necessary to take care about the connection in > the > > rest of the code? > > No, after that there are many different calls to pass connection2 to. Of > course if MyTable and MyTable2 are really two different tables and every > one of them are in two different databases you just set connection2 to be > the default connection for MyTable2: > > MyTable2.setConnection(connection2) > > and forget about connections. But if you want to copy data between two > identical tables in two different databases - you have to pass connection2 > to all methods you call: > My tables are two different tables in two different databases. I am using some small table(s) to store data to communicate (signalize) between two running scripts on one computer (I am not skilled enough to write a multithread script). I am on Linux and to achieve reasonable speed I am using tmpfs (kind of RAM disk: "mount -t tmpfs -o size=10m none /work"). Because of that I need to have two different databases (connections). One for persistent data and the other one for signaling. Thanks for your help. Petr |
From: Oleg B. <ph...@ph...> - 2008-02-05 21:56:58
|
On Tue, Feb 05, 2008 at 10:52:52PM +0100, Petr Jake?? wrote: > My tables are two different tables in two different databases. Then your way is even simpler: class MyTable(SQLObject): _connection = connection class MyTable2(SQLObject): _connection = connection2 Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Oleg B. <ph...@ph...> - 2008-02-05 22:05:28
|
On Wed, Feb 06, 2008 at 12:57:08AM +0300, Oleg Broytmann wrote: > class MyTable(SQLObject): > _connection = connection > > class MyTable2(SQLObject): > _connection = connection2 BTW, both _connection and the parameter to .setConnection() can be a DB URI string - SQLObject calls connectionForURI() itself. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: P. J. <pet...@tp...> - 2008-02-05 22:14:12
|
On Feb 5, 2008 11:05 PM, Oleg Broytmann <ph...@ph...> wrote: > On Wed, Feb 06, 2008 at 12:57:08AM +0300, Oleg Broytmann wrote: > > class MyTable(SQLObject): > > _connection = connection > > > > class MyTable2(SQLObject): > > _connection = connection2 > > BTW, both _connection and the parameter to .setConnection() can be a DB > URI string - SQLObject calls connectionForURI() itself. > > Thanks a lot. I will give it a try. Petr |
From: P. J. <pet...@tp...> - 2008-02-05 22:30:29
|
On Feb 5, 2008 11:14 PM, Petr Jakeš <pet...@tp...> wrote: > On Feb 5, 2008 11:05 PM, Oleg Broytmann <ph...@ph...> wrote: > > > On Wed, Feb 06, 2008 at 12:57:08AM +0300, Oleg Broytmann wrote: > > > class MyTable(SQLObject): > > > _connection = connection > > > > > > class MyTable2(SQLObject): > > > _connection = connection2 > > > > BTW, both _connection and the parameter to .setConnection() can be a > > DB > > URI string - SQLObject calls connectionForURI() itself. > > > > it looks it is necessary first to call: connection2 = connectionForURI('sqlite:///work/mincovnik.db') and than: class MyTable2(SQLObject): ...... MyTable2.createTable(ifNotExists=True, connection=connection2) If I do only: class MyTable2(SQLObject): _connection = 'sqlite:///work/mincovnik.db' ....... MyTable2.createTable(ifNotExists=True) or: connection2 = connectionForURI('sqlite:///work/mincovnik.db') class MyTable2(SQLObject): _connection = connection2 ..... MyTable2.createTable(ifNotExists=True) than the db file '/work/mincovnik.db' is not created Petr |