Problem with global

F

Florian Lindner

Hello,
I have a little problem with the global statement.

def executeSQL(sql, *args):
try:
import pdb; pdb.set_trace()
cursor = db.cursor() # db is <type 'NoneType'>.
[...]
except:
print "Problem contacting MySQL database. Please contact root."
sys.exit(-1)


db = None # Global Variable for DB connection

def main():
[...]
global db
db = MySQLdb.connect(...)
[...]
executeSQL(sql, args)


Why isn't the global variable db not written in main() to be a mysql
connection and still none type in executeSQL?

Thanks,

Florian
 
L

Larry Bates

Florian said:
Hello,
I have a little problem with the global statement.

def executeSQL(sql, *args):
try:
import pdb; pdb.set_trace()
cursor = db.cursor() # db is <type 'NoneType'>.
[...]
except:
print "Problem contacting MySQL database. Please contact root."
sys.exit(-1)


db = None # Global Variable for DB connection

def main():
[...]
global db
db = MySQLdb.connect(...)
[...]
executeSQL(sql, args)


Why isn't the global variable db not written in main() to be a mysql
connection and still none type in executeSQL?

Thanks,

Florian

Because you have it to let executeSQL know that it is global or it creates a
local copy in local namespace.

def executeSQL(sql, *args):
global db
try:
import pdb; pdb.set_trace()
cursor = db.cursor() # db is <type 'NoneType'>.
[...]
except:
print "Problem contacting MySQL database. Please contact root."
sys.exit(-1)

-Larry
 
F

Florian Lindner

Larry said:
Florian said:
Hello,
I have a little problem with the global statement.

def executeSQL(sql, *args):
try:
import pdb; pdb.set_trace()
cursor = db.cursor() # db is <type 'NoneType'>.
[...]
except:
print "Problem contacting MySQL database. Please contact root."
sys.exit(-1)


db = None # Global Variable for DB connection

def main():
[...]
global db
db = MySQLdb.connect(...)
[...]
executeSQL(sql, args)


Why isn't the global variable db not written in main() to be a mysql
connection and still none type in executeSQL?

Thanks,

Florian

Because you have it to let executeSQL know that it is global or it creates
a local copy in local namespace.

That's not right in the context because db is read before it written.
Therefore the global copy springs into the local namespace.
def executeSQL(sql, *args):
global db
try:
import pdb; pdb.set_trace()
cursor = db.cursor() # db is <type 'NoneType'>.
[...]
except:
print "Problem contacting MySQL database. Please contact root."
sys.exit(-1)

I've solved it. It was a problem you could not have possibly seen. Actually
in my script executeSQL is called before db = MySQLdb.connect(..) is
called. When I have simplified the code for the posting I've changed it
made it right without knowing.

Regards,

Florian
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,431
Messages
2,571,679
Members
48,796
Latest member
Greg L.

Latest Threads

Top