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 -- https://mail.python.org/mailman/listinfo/python-list