Visibilidade de variáveis ​​globais em módulos importados

Eu me deparei com um pouco de parede importando módulos em um script Python. Eu farei o meu melhor para descrever o erro, por que eu me deparo com ele e por que estou ligando essa abordagem específica para resolver o meu problema (que descreverei em um segundo):

Vamos supor que eu tenha um módulo no qual eu tenha definido algumas funções / classes de utilidade, que se referem a entidades definidas no namespace no qual este módulo auxiliar será importado (deixe "a" ser tal entidade):

Módulo 1:

def f():
    print a

E então eu tenho o programa principal, onde "a" é definido, para o qual eu quero importar esses utilitários:

import module1
a=3
module1.f()

A execução do programa acionará o seguinte erro:

Traceback (most recent call last):
  File "Z:\Python\main.py", line 10, in <module>
    module1.f()
  File "Z:\Python\module1.py", line 3, in f
    print a
NameError: global name 'a' is not defined

Perguntas semelhantes foram feitas no passado (dois dias atrás, d'uh) e várias soluções foram sugeridas, no entanto, eu não acho que elas se encaixem em minhas exigências.Aqui está meu contexto particular:

Eu estou tentando fazer um programa de Python que se conecta a um servidor de banco de dados MySQL e exibe / modifica dados com uma GUI. Por questões de limpeza, eu defini o grupo de funções auxiliares / relacionadas ao MySQL em um arquivo separado. No entanto, todos eles têm uma variável comum, que eu tinha definido originalmentedentro o módulo de utilidades, e qual é ocursor objeto do módulo MySQLdb. Mais tarde percebi que ocursor objeto (que é usado para se comunicar com o servidor db) deve ser definido no módulo principal,de modo que o módulo principal e qualquer coisa importada para ele possam acessar esse objeto.

O resultado final seria algo assim:

utilities_module.py:

def utility_1(args):
    code which references a variable named "cur"
def utility_n(args):
    etcetera

E meu módulo principal:

program.py:

import MySQLdb, Tkinter
db=MySQLdb.connect(#blahblah) ; cur=db.cursor()  #cur is defined!
from utilities_module import *

E então, assim que eu tento chamar qualquer uma das funções de utilitários, ele aciona o erro "nome global não definido" acima mencionado.

Uma sugestão específica era ter uma instrução "from program import cur" no arquivo de utilitários, como:

utilities_module.py:

from program import cur
#rest of function definitions

program.py:

import Tkinter, MySQLdb
db=MySQLdb.connect(#blahblah) ; cur=db.cursor()  #cur is defined!
from utilities_module import *

Mas isso é uma importação cíclica ou algo assim e, em última análise, ele também falha. Então minha pergunta é:

Como posso fazer o objeto "cur", definido no módulo principal, visível para as funções auxiliares que são importadas para ele?

Obrigado pelo seu tempo e minhas mais profundas desculpas se a solução foi publicada em outro lugar. Eu simplesmente não consigo encontrar a resposta e não tenho mais truques no meu livro.

questionAnswers(7)

yourAnswerToTheQuestion