首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用peewee的自动连接?

如何禁用peewee的自动连接?
EN

Stack Overflow用户
提问于 2019-06-21 04:20:26
回答 1查看 354关注 0票数 0

考虑下面的代码

代码语言:javascript
复制
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抛出异常--而不是自动连接到它,而不让我知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-23 20:28:59

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

代码语言:javascript
复制
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中了。将包含在下一个版本中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56696791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档