global name is not defined
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Tue Nov 6 17:20:38 EST 2007
En Tue, 06 Nov 2007 18:57:12 -0300, barronmo <barronmo at gmail.com> escribió:
> I'm getting an error msg I don't understand, "global name EMR_globals
> is not defined", and could use some help.
>
> I've separated the application I'm building into several modules. One
> of the modules holds variables I need to pass from one module to
> another and is called 'EMR_globals'. Several other modules hold
> functions or user menus and then 'EMR_main' controls the initial user
> interaction. I'm using MySQL to hold the data.
Global variables usually are not a good design decision, but that's not
your current problem.
> The initial connection to the database is done by 'EMR_main'.
> Functions then define and close a cursor for various queries. The
> connection variable, 'conn', is defined 'conn = "" ' in EMR_globals
> and then used in EMR_main. Unfortunately when a module.function
> attempts to use it I get the error msg.
In Python, "global" means "global to the module". If conn is defined in
EMR_globals, when you want to use it elsewhere, you can:
a)
from EMR_globals import conn
...
cursor = conn.cursor(...)
b)
import EMR_globals
...
cursor = EMR_globals.conn.cursor(...)
Usually those import statements are placed at the top of the module.
> cursor.execute("SELECT * FROM demographics WHERE patient_ID = %s"
> % (a,))
> selected_pt = cursor.fetchall()
> # if this query returns more than one record the following code will
> fail I think
> print menus.menu_demographics(selected_pt['firstname'],
> selected_pt['lastname'], ...
I think it will fail even with one record, because fetchall() returns a
list of rows. Try using fetchone(). Anyway, if patient_ID is the primary
key, you should always get a single row.
--
Gabriel Genellina
More information about the Python-list
mailing list