When I need a new Cursor() for a database, I have at least 2 ways to initialize a new one.
Using the helpers functions in
cr = openerp.pooler.get_db('name_of_my_database').cursor() # or db, pool = openerp.pooler.get_db_and_pool('name_of_my_database') cr = db.cursor()
cr = openerp.sql_db.db_connect('name_of_my_database').cursor()
Note that both are used in OpenERP server or addons.
What is the difference between them and for which use case should I use one or the other function?
By a reading of the functions, I found that:
openerp.pooler.get_db get the
Registry for the database and returns the
db attribute of the
Registry().db is initialized using
At end, they both return an instance of a
openerp.sql_db.Connection which respond to
It seems to me that we can use one or the other equally.
openerp.pooler.get_db appears to be more 'High-Level' and needs to already have a
Registry for the database.
My feeling is that we should use
openerp.sql_db.db_connect only when we are not sure that we have a
Registry for the database (during start or update of modules), otherwise we should prefer to use
This is a standard design pattern. Applications usually pool all their database connections so that each module does not have to create its on database connection (as they are very costly)
You should always use the pooler.get_db, which underneath creates a connection if needed. But, if the pooler already has a connection, it saves you a lot of time and gives it to you.
Just do repeat, you should always avoid making direct database connections and use the pooler (think of like like a car pool)
Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!
About This Community
|Asked: 2/12/13, 1:20 PM|
|Seen: 2317 times|
|Last updated: 3/16/15, 8:10 AM|