peewee模型会自动关闭连接吗?

时间:2017-01-19 08:07:18

标签: python database sqlite peewee

我正在使用peewee来访问SQLite数据库。

我做了model.py喜欢:

from peewee import *

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()

    class Meta:
        database = db

在另一个Python文件(包含import model)中,然后我使用Person.create()Person.select(name=='Joe').delete_instance()等调用操作数据库。

Quickstart最后说要拨打db.close()来关闭连接。这也适用于我的情况吗?我应该打电话给model.db.close()吗?

2 个答案:

答案 0 :(得分:3)

根据Charles Leifer,peewee 的制造者终止连接是程序员的工作。有关连接池的文档告诉我们,所有连接都是线程本地的,因此只要模型正在使用,如果包含事务的线程加入主线程,连接将保持打开并死亡。

Charles明确回答了有关连接池的问题。答案有点概括,但我认为这同样适用于所有连接:About connection pool

关于该主题的隐含答案:

Error 2006: MySQL server has gone away

摘自文档Quickstart Page

  

虽然没有必要明确地打开连接,但这是一个好习惯,因为它会立即显示数据库连接的任何错误,而不是在执行第一个查询后的某个任意时间。 完成后关闭连接也很不错 - 例如,Web应用可能会在收到请求时打开连接,并在发送响应时关闭连接。

根据以下信息,您问题的最终答案是:否。

答案 1 :(得分:1)

您可以手动打开和关闭连接:

在您的情况下(使用db = SqliteDatabase('people.db')

您通过以下方式建立了与数据库的连接:

db.connect()

接下来,您可以使用数据库执行任何操作,最后使用以下命令关闭连接:

db.close()