title: can I put my sqlite connection and cursor in a function?
body: <p>I was thinking I'd try to make my sqlite db connection a function instead of copy/pasting the ~6 lines needed to connect and execute a query all over the place.
  I'd like to make it versatile so I can use the same function for create/select/insert/etc...</p>
  
  <p>Below is what I have tried. The 'INSERT' and 'CREATE TABLE' queries are working, but if I do a 'SELECT' query, how can I work with the values it fetches outside of the function?<br>
  Usually I'd like to print the values it fetches and also do other things with them.  </p>
  
  <p>When I do it like below I get an error</p>
  
  <pre><code>Traceback (most recent call last):
  File "C:\Users\steini\Desktop\py\database\test3.py", line 15, in &lt;module&gt;
  for row in connection('testdb45.db', "select * from users"):
  ProgrammingError: Cannot operate on a closed database.
  </code></pre>
  
  <p>So I guess the connection needs to be open so I can get the values from the cursor, but I need to close it so the file isn't always locked.</p>
  
  <p>Here's my testing code:</p>
  
  <pre><code>import sqlite3
  
  def connection (db, arg, cubby):
      conn = sqlite3.connect(db)
      conn.execute('pragma foreign_keys = on')
      cur = conn.cursor()
      cur.execute(arg)
      for row in cur:
          cubby.append(row)
      conn.commit()
      conn.close()
  
  cubby=[]
  connection('testdb.db', "create table users ('user', 'email')", cubby)
  connection('testdb.db', "insert into users ('user', 'email') values ('joey', 'foo@bar')", cubby)
  for row in connection('testdb45.db', "select * from users", cubby):
      print row
  </code></pre>
  
  <p>How can I make this work?</p>
  
  <p>EDIT: modified the code a little so the cur values so it's appended to an outside list, but still pretty bad</p>