Quick questions about globals and database connections

Dan Sommers dan at tombstonezero.net
Wed Apr 5 11:31:37 EDT 2017


On Wed, 05 Apr 2017 10:54:29 -0400, DFS wrote:

> I have identical databases in sqlite and postgres.  I want to run the 
> same code against them, but am having a small issue.
> 
> Current code below throws the dreaded:
> 
> NameError: global name 'db' is not defined
> 
> on line 12
> 
> How do I fix it?  I want to keep dbconnect() as a separate function.
> 
> Thanks.
> 
> -------------------------------------------------------------
> 1 import sqlite3, psycopg2
> 2
> 3 def dbconnect(dbtype):
> 4   if dbtype == "sqlite":
> 5     conn = sqlite3.connect(cstr)
> 6   elif dbtype == "postgres":
> 7     conn = psycopg2.connect(cstr)
> 8   db = conn.cursor()

This line just sets db locally to dbconnect.

You'll have to return it in order to use it elsewhere.

Add a line like this:

    return db

> 9	
> 10 def updatedb(dbtype):
> 11   dbconnect(dbtype)

And then use the return value from dbconnect to create a new db locally
to updatedb:

    db = dbconnect(dbtype)

> 12   db.execute("DML code")
> 13   print "updated " + dbtype
> 14   'close connection
> 
> 15 def main():
> 16   updatedb('sqlite')
> 17   updatedb('postgres')
> 18
> 19 if __name__ == "__main__":
> 20   main()
> -------------------------------------------------------------

HTH,
Dan


More information about the Python-list mailing list