Как отключить автоматические подключения peewee? - PullRequest
0 голосов
/ 21 июня 2019

Рассмотрим следующий фрагмент кода

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 просто генерировать исключения, если база данных не подключена - в отличие от автоматического подключения к ней, не давая мне знать.

1 Ответ

1 голос
/ 23 июня 2019

Во-первых, ваш пример фальшивый и неправильный.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.Будет содержаться в следующем выпуске.

...