【问题标题】:How to disable peewee's automatic connections?如何禁用peewee的自动连接?
【发布时间】:2019-11-03 21:54:02
【问题描述】:

考虑下面这段代码

import peewee

SQL_CONN = peewee.MySQLDatabase(database=SQL_DATA,
                                host=SQL_HOST,
                                port=SQL_PORT,
                                user=SQL_USER,
                                passwd=SQL_PASS)

class User(peewee.Model):
    name = peewee.CharField(max_length=100, primary_key=True)

    born = peewee.DateTimeField()

print(SQL_CONN.is_closed()) # True

print(User.select().where(User.name == "Jack").execute()) # Silently opens a connection w/o letting me know

print(SQL_CONN.is_closed()) # False

这将在后台自动执行SQL_CONN.connect()

如何禁用此功能 - 如果数据库未连接,则强制 peewee 抛出异常 - 而不是在不通知我的情况下自动连接到它。

【问题讨论】:

    标签: python peewee flask-peewee


    【解决方案1】:

    首先,你的例子是假的和错误的。当您仅创建查询对象时,Peewee 不会打开连接。看看吧:

    In [1]: from peewee import *                                                                    
    
    In [2]: db = SqliteDatabase(':memory:')                                                         
    
    In [3]: class User(Model): 
       ...:     username = TextField() 
       ...:     class Meta: 
       ...:         database = db 
       ...:                                                                                         
    
    In [4]: db.is_closed()  # Should be True.                                                       
    Out[4]: True
    
    In [5]: query = User.select().where(User.username == 'charlie')                                 
    
    In [6]: db.is_closed()  # Still TRUE, we haven't evaluated anything yet!
    Out[6]: True
    

    因此,首先,您的示例甚至都不正确。您必须评估查询才能执行。

    回答这个问题的其余部分:

    Peewee 没有提供禁止隐式连接的机制。如果您尝试执行查询,Peewee 将打开不存在的连接。

    我建议您在执行查询时应该非常清楚,因此 - 当您需要打开连接时。如果这还不够,则继承并覆盖 Database.cursor() 方法。


    编辑:

    尽管以前没有人提出过这个要求,但实现起来非常简单,我已经在 Peewee 中添加了这个功能。将包含在下一个版本中。

    【讨论】:

    • 感谢您的帮助!我已修改错误示例以包含.execute()
    • “即使以前没有人要求过这个”。不是真的 - 我们在 2015 年左右就这个确切的功能进行了广泛的争论。但很高兴看到它! =D 文档链接:docs.peewee-orm.com/en/latest/peewee/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2012-06-13
    相关资源
    最近更新 更多