2009-03-20 2 views
6

У кого-нибудь есть пул соединений, работающих с Django, SQLAlchemy и MySQL?Django объединение пулов и полей времени

Я использовал этот учебник (http://node.to/wordpress/2008/09/30/another-database-connection-pool-solution-for-django-mysql/), который отлично поработал, но проблема, с которой я сталкиваюсь, - это когда я возвращаю поле времени, оно преобразуется в timedelta, поскольку конверсии, специфичные для Django, не используются.

код Преобразование из Джанго/дб/бэкэндов/MySQL/base.py

django_conversions = conversions.copy() 
django_conversions.update({ 
FIELD_TYPE.TIME: util.typecast_time, 
FIELD_TYPE.DECIMAL: util.typecast_decimal, 
FIELD_TYPE.NEWDECIMAL: util.typecast_decimal, 

})

код соединения из статьи:

if settings.DATABASE_HOST.startswith('/'): 
      self.connection = Database.connect(port=kwargs['port'], 
               unix_socket=kwargs['unix_socket'], 
               user=kwargs['user'], 
               db=kwargs['db'], 
               passwd=kwargs['passwd'], 
               use_unicode=kwargs['use_unicode'], 
               charset='utf8') 
     else: 
      self.connection = Database.connect(host=kwargs['host'], 
               port=kwargs['port'], 
               user=kwargs['user'], 
               db=kwargs['db'], 
               passwd=kwargs['passwd'], 
               use_unicode=kwargs['use_unicode'], 
               charset='utf8') 
+1

Django имеет свой собственный ORM, он не использует SQlAlchemy, если вы не настроили его вручную. –

ответ

1

В стволу Django, редактировать Джанго/db/init .py и прокомментируйте строку:

signals.request_finished.connect (close_connection)

Этот обработчик сигнала заставляет его отключать от базы данных после каждого запроса. Я не знаю, какие побочные эффекты будут делать это, но не имеет смысла начинать новое соединение после каждого запроса; как вы заметили, он разрушает производительность.

Еще одно необходимое изменение: django/middleware/transaction.py; удалите два теста transaction.is_dirty() и всегда вызывайте commit() или rollback(). В противном случае он не будет совершать транзакцию, если он только считывает из базы данных, что будет закрывать блокировки, которые должны быть закрыты.

Смежные вопросы