Каково лучшее решение для объединения соединения с базой данных в Python?

Возможно, что «работает не так, как ожидалось», значит, ваши ожидания ошибочны.

Следует отметить, что есть некоторые проблемы со связанным кодом , который, я полагаю, вы использовали дословно. Функция SendMessage отображается дважды. Первое отображение корректно, но никогда не используется:

  LRESULT SendMessageA(HWND paramHWND, int paramInt, WPARAM paramWPARAM,
        LPARAM paramLPARAM);

Второе отображение заменяет int на WPARAM, и меня не удивит, если некоторые результаты здесь будут необычными, особенно на 64 система / JVM. Это версия, которая называется в коде.

  LRESULT SendMessageA(HWND paramHWND, int paramInt, int paramInt2,
        LPARAM paramLPARAM);

Несмотря на это, код работает должным образом, он активирует функции управления питанием , чтобы выключить монитор! Проблема с вашими ожиданиями заключается в том, что вы не продумали, что может снова включить монитор. Перемещение или щелчок мыши (или, возможно, отпускание нажатой кнопки мыши), нажатие (или отпускание) клавиши, сетевая активность или множество других вещей могут генерировать системные события, которые сигнализируют о функции энергосбережения для возврата монитора назад. на . (Вы, вероятно, увидите те же результаты из фрагмента powershell; возможно, в этом случае ваша последовательность щелчков мышью / нажатий клавиш будет другой).

32
задан John 19 September 2008 в 01:46
поделиться

4 ответа

IMO, "более очевидное/больше идиоматическое/лучше решение" состоит в том, чтобы использовать существующий ORM, а не изобрести подобные ДАО классы.

кажется мне, что ORM's более популярен, чем "необработанные" соединения SQL. Почему? Поскольку Python OO, и отображение от строки SQL до возразить абсолютно необходимо. Нет многих случаев, где Вы имеете дело со строками SQL, которые не отображаются на объекты Python.

я думаю что SQLAlchemy или SQLObject (и связанная организация пула подключений) более идиоматическое решение Pythonic.

Объединение как отдельная функция не очень распространено, потому что чистый SQL (без отображения объекта) не очень популярен для вида сложных, продолжительных процессов то преимущество от организации пула подключений. Да, чистый SQL используется, но он всегда используется в более простых или более управляемых приложениях, где объединение не полезно.

я думаю, что у Вас могло бы быть две альтернативы:

  1. Пересматривают Ваши классы для использования SQLAlchemy или SQLObject. В то время как это кажется болезненным сначала [вся эта работа, потраченная впустую], необходимо смочь усилить весь дизайн и мысль, и это - просто упражнение в принятии широко используемого ORM и объединении решения.
  2. Самокрутка простой пул соединения с помощью алгоритма Вы обрисовали в общих чертах - простой Набор или Список соединений, которые Вы циклически повторяете через.
16
ответ дан 27 November 2019 в 20:30
поделиться

В MySQL?

я сказал бы, не беспокоятся организацией пула подключений. Они часто - источник проблемы, и с MySQL они не собираются приносить Вам преимущество производительности, на которое Вы надеетесь. Эта дорога может быть большим усилием следовать - с политической точки зрения - потому что существует такое помахивание руки лучших практик и формулировка учебника в этом пространстве о преимуществах организации пула подключений.

пулы Соединения являются просто мостом между поствеб-эрой приложений не сохраняющих состояние (например, Протокол HTTP) и предвеб-эрой долговечных приложений пакетной обработки с сохранением информации. Так как соединения были очень дорогими в предвеб-базах данных (так как никто раньше не заботился слишком много о том, сколько времени соединение взяло для установления), поствеб-приложения разработали эту схему пула соединения так, чтобы каждый хит не подвергался этой огромной обработке наверху на RDBMS.

MySQL Since является большим количеством веб-эры RDBMS, соединения чрезвычайно легки и быстры. Я записал много веб-приложений большого объема, которые не используют пул соединения вообще для MySQL.

Это - сложность, которой можно извлечь выгоду из обхождения без, пока нет политического препятствия для преодоления.

21
ответ дан 27 November 2019 в 20:30
поделиться

Перенесите свой класс соединения.

Установленный предел для того, сколько связей Вы устанавливаете. Возвратите неиспользованное соединение. Прерывание близко к свободному соединение.

Обновление: Я поместил что-то вроде этого в dbpool.py:

import sqlalchemy.pool as pool
import MySQLdb as mysql
mysql = pool.manage(mysql)
16
ответ дан 27 November 2019 в 20:30
поделиться

I've just been looking for the same sort of thing.

I've found pysqlpool and the sqlalchemy pool module

2
ответ дан 27 November 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: