考虑下面的代码
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抛出异常--而不是自动连接到它,而不让我知道。
发布于 2019-06-23 20:28:59
首先,你的例子是假的和错误的。当您只创建查询对象时,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中了。将包含在下一个版本中。
https://stackoverflow.com/questions/56696791
复制相似问题