can i set up a mysql db connection as a class ?

*binarystar* newsgroup_mail... at ...binarystar.org
Fri Apr 28 02:35:36 EDT 2006


I suppose that is possible because you are calling the one instance of a cursor object ... maybe you have to create a copy of the cursor object, rather than passing a reference to the one object? or set up the db_connection objects inside each of the threads? .. 


Winfried Tilanus wrote:
> On 04/28/2006 07:54 AM, *binarystar* wrote:
> 
> Just wondering: is there any risk of two threads accessing the Execute
> function at the same time and getting something like this on the same
> cursor object:
> 
> thread_1: self.cursor.Execute( sql_statement )
> thread_2: self.cursor.Execute( sql_statement )
> thread_1: return self.cursor.FetchAll()
> thread_2: return self.cursor.FetchAll()
> 
> In that case the queries would seriously be messed up. My intuition says
> this would need some locking or a 'cursor-pool'.
> 
> best wishes,
> 
> Winfried
> 
> 
>> your on the right track ... create something like this ( hope the
>> formatting doesn't go to hay wire )
>>
>> class DB_Connector(object):
>>
>>     """ Humble Database Connection Class """
>>         def __init__(self, host="localhost",
>> user="MyUser",passwd="MyPassword", **other_db_arguments):
>>                       self.host   =   host
>>            self.user   =   user
>>            self.passwd =   passwd
>>                       # Unpack Other Database Arguments Here
>>                                  self.CreateConnection()
>>                def CreateConnection( self ):
>>               self.cursor = MySQLdb.connect(self.host, self.user,
>> self.passwd)
>>            def DestroyConnection( self ):
>>               self.cursor.close()
>>            def Execute( self, sql_statement ):
>>               self.cursor.Execute( sql_statement )
>>               return self.cursor.FetchAll()
>>        Then when you run your program create an instance of the object
>>
>> db_connection     = DB_Connector( 'localhost', 'administrator',
>> 'betelgeuse99', auto_commit=1, other_keyword_arg="yes" )
>>
>> now when you pass the db_connection instance to other classes, a copy
>> will be made automagically
>>
>> thread_1_instance    = ThreadingClass( db_connection )
>> thread_2_instance    = ThreadingClass( db_connection )
>> thread_3_instance    = ThreadingClass( db_connection )
>>
>> should work ..
>> I hope this is useful



More information about the Python-list mailing list