Re: can i set up a mysql db connection as a class ?
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

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

From: *binarystar* <newsgroup_mail...@...binarystar.org>
Date: Fri Apr 28 2006 - 08:35:36 CEST

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
Received on Mon May 1 00:35:48 2006