簡體   English   中英

如何禁用peewee的自動連接?

[英]How to disable peewee's automatic connections?

考慮以下代碼

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()自動執行SQL_CONN.connect()

我如何禁用此功能-如果未連接數據庫則強制peewee拋出異常-而不是在不通知我的情況下自動連接到它。

首先,您的示例是假的和錯誤的。 當您僅創建查詢對象時,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中。 將包含在下一個版本中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM