使用函数打开/关闭sqlite数据库连接?

时间:2017-05-07 13:10:50

标签: python sqlite

对Python和sqlite都不熟悉,我最近都试图解决这些问题。特别是对于sqlite,我已经学会了如何打开/关闭/提交数据到数据库。但是现在我试图清理一下,以便通过函数调用打开/关闭数据库。例如,我想做类似的事情:

def open_db():
    conn = sqlite3.connect("path)
    c = conn.cursor()

def close_db():    
    c.close()
    conn.close()

def create_db():
    open_db()
    c.execute("CREATE STUFF")
    close_db()

然后当我运行程序时,在查询或写入表之前,我可以执行以下操作:

open_db()
c.execute('SELECT * DO STUFF')
OR
c.execute('DELETE * DO OTHER STUFF')
conn.commit
close_db()

我已经阅读了有关情境管理人员的内容,但我不确定我是否完全理解他们的情况。清理我打开/关闭数据库连接的方式最简单的解决方案是什么,所以我并不总是必须输入cursor命令。

2 个答案:

答案 0 :(得分:1)

这是因为您定义的连接是open db函数的本地连接。将其更改如下

def open_db():
    conn = sqlite3.connect("path)
    return conn.cursor()

然后

c = open_db()
c.execute('SELECT * DO STUFF')

应该注意的是,像这样编写函数纯粹作为一种学习练习可能没问题,但通常在数据库连接api周围编写一个瘦包装器并不是很有用。

答案 1 :(得分:1)

我不知道有一种简单的方法。如前所述,如果将数据库游标或连接的名称设置为函数的本地名称,则在退出该函数时这些名称将丢失。答案可能是使用contextlib模块编写代码(它包含在Python发行版中,并在帮助文件中记录);我不会那么容易。 sqlite3的文档确实提到连接对象可以用作上下文管理器;我怀疑你已经注意到了这一点。我也看到MySQL有某种上下文管理器,但我还没有使用它。