【问题标题】:Do peewee models automatically close the connection?peewee 模型会自动关闭连接吗?
【发布时间】:2017-01-19 08:07:17
【问题描述】:

我正在使用 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()吗?

【问题讨论】:

  • 我可以知道is_relative属性会做什么(它有什么用)...??

标签: python database sqlite peewee


【解决方案1】:

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

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

关于该主题的隐含答案:

Error 2006: MySQL server has gone away

摘自文档Quickstart Page

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

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

【讨论】:

    【解决方案2】:

    您手动打开和关闭连接:

    在你的情况下(db = SqliteDatabase('people.db')

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

    db.connect()
    

    接下来你对数据库做任何你想做的事情,最后你关闭连接:

    db.close()
    

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 2017-05-24
      相关资源
      最近更新 更多