Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 7, 2009 18:09:12

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

И снова здравствуйте :-)

У меня два разнообразных вопроса теперь:

1. Т. к. ТГ при каждом рестарте плодит по коннекшну, не убивая предыдущие, я попыталась это дело победить как-то так:

from sqlalchemy import *

engine = create_engine("postgres://stat_admin:password@172.0.0.0:5433/gf_cfv?pool=2&pool_recycle=300")
или так:

from sqlalchemy import *

engine = create_engine("postgres://stat_admin:password@172.0.0.0:5433/gf_cfv", connect_args=dict(pool=2, pool_recycle=300))
… и получаю следующее:

sqlalchemy.exc.DBAPIError: (TypeError) ‘pool_recycle’ is an invalid keyword argument for this function None None

Как это правильно сделать, чтобы ограничить число одновременных коннекшнов к базе?


И второй вопрос:

Пытаюсь прикрутить вывод статистики в эксель. Я когда-то написала простенький парсер с таким экспортом, и решила скопипейстить оттуда код в ТГ. Вот так он примерно выглядит:

from win32com.client import Dispatch
import datetime
@expose
def graph2xl(self):
sheetName = 'H:\\team-ne\\team_ne\\templates\\report.xls'
xlApp = Dispatch("Excel.Application")
reportBook = xlApp.Workbooks.Open(sheetName)
#xlApp.Visible = 1
row = 6
try:
for k in finance_report: #<--- глобальная переменная со словарем с данными, определяется в другой функции.
reportBook.ActiveSheet.Cells(row, 1).Value = k.anbieter
reportBook.ActiveSheet.Cells(row, 10).Value = year_from #<--- глобальная переменная, определяется в другой функции.
reportBook.ActiveSheet.Cells(row, 22).Value = year_from+1
row += 6
finally:
reportBook.SaveAs("H:\\team-ne\\team_ne\\berichte\\"+time.strftime('%d-%m-%y_%H-%M-%S')+".xls")
xlApp.Quit()
return str("hallo welt")#<---- не совсем понятно, что тут вообще писать в этом случае, и надо ли оно ваще тут?
И оно не работает, говорит что:

File “c:\Python25\lib\inspect.py”, line 742, in getargspec
raise TypeError('arg is not a Python function')
TypeError: arg is not a Python function

Что это оно мне пишет? На что ругается?

Это кошмар какой-то.

Традиционное гигантское спасибо in advance :-)



Офлайн

#2 Янв. 7, 2009 19:50:50

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

по первому вопросу завтра посмотрю, сходу сказать не могу. по поводу экспорта в excel, дайте начало трайсбека, не понятно на какую строчку он ругается, а еще лучше не используйте COM, а используйте библиотеку pyExcelerator, работать будет куда быстрее и избежите кучи непонятных проблем, вот вам маленький пример:

    @expose()                                                                                                                
def awalance_report(self, kind=0, code=0, dateChange=None):
#здесь формируется выборка, я выкинул как неинтересное
import pyExcelerator as ex
import cStringIO as StringIO

w = ex.Workbook()
sheet = w.add_sheet(u'Льготники')
ex.UnicodeUtils.DEFAULT_ENCODING = 'cp1251' #кодировка документа, вам наверно не понадобится

for row, obj in enumerate(query):
sheet.write(row, 1, obj.subject.lastName)
sheet.write(row, 2, obj.subject.firstName)
sheet.write(row, 3, obj.subject.middleName or '')
sheet.write(row, 4, formatDate(obj.subject.birthDate))
sheet.write(row, 5, obj.subject.inn or '')

ofile = StringIO.StringIO()
w.save(ofile)
result = ofile.getvalue()
ofile.close()
#устанавливаем правильный MIME-тип
cherrypy.response.headers["Content-Type"] = "application/vnd.ms-excel"
cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=result.xls'
return result



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

Отредактировано (Янв. 7, 2009 19:54:27)

Офлайн

#3 Янв. 8, 2009 07:34:22

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

PooH
cherrypy.response.headers = “application/vnd.ms-excel”
согласно документации от w3c вариант “application/vnd.ms-excel” более правильный чем
cherrypy.response.headers['Content-Type'] = "application/ms-excel"
хотя использую второй способ и он тоже работает

http://www.w3.org/Library/src/HTBInit.c
http://www.w3.org/People/mimasa/test/xhtml/media-types/Netscape8.0.2-IE
PooH, +1



Офлайн

#4 Янв. 8, 2009 09:11:33

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

Спасибо огромное!
Я на работу только завтра пойду, буду пробовать.

А почему СОМ лучше не использовать? У меня про него такой хороший учебник



Офлайн

#5 Янв. 8, 2009 11:16:26

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

hildi
А почему СОМ лучше не использовать? У меня про него такой хороший учебник
1. Теряем кросплатформенность
2. Теряем производительность - переход через границы процесса дорогая штука
3. Зависимость от установленной версии Excel
4. Хуже отлаживамся - здесь я могу полезть в исходники, в случае COM я буду медитировать над выкинутым исключением

И вообще чем проще подход - тем лучше работает :)



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

Офлайн

#6 Янв. 8, 2009 11:54:38

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

По первому вопросу: а зачем вам понадобилось явно создавать engine? ТГ с ней сам прекрасно работает
в методах контроллера:

from turbogears.database import session
offers = session.query(model.Offer).filter(model.Offer.contact == manager)
в файлах модели
from turbogears.database import metadata

visits_table = Table('visit', metadata,
Column('visit_key', String(40), primary_key=True),
Column('created', DateTime, nullable=False, default=datetime.now),
Column('expiry', DateTime)
)
в методах объектов модели
from sqlalchemy.orm import object_session

class BuildingComplex(Building):
u"Комплекс зданий"

def _get_construction_count(self):
return object_session(self).query(Realty).filter(and_(realty_table.c.complex_id == self.id,
realty_table.c.type == 'construction')).count()
construction_count = property(_get_construction_count)
Мне кажеться вы сами себя перехитрили ;)



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

Офлайн

#7 Янв. 8, 2009 14:07:58

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

engine я создавала, чтобы включить ORM, у меня там существующие таблицы маппятся в классы. Это можно сделать и без engine?
я делала, как в учебнике написано :-)

Пусть пока лучше будет, так я хоть могу себе представить, как оно работает, а то вы такие ужасы пишете, а говорите, что просто :-)



Офлайн

#8 Янв. 8, 2009 14:15:39

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

hildi
Пусть пока лучше будет, так я хоть могу себе представить, как оно работает, а то вы такие ужасы пишете, а говорите, что просто :-)
Угу, по-боцмански - безобразно, но однообразно ИЛИ человек - сам писец своего счастья :)
Дайте код мапинга, я покажу как сделать правильно, а то получается - кто играет семь бубен, то бывает у. хм… удивлен :)



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

Офлайн

#9 Янв. 8, 2009 14:49:53

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

Код у меня на работе, я завтра запощу. Там довольно мало букв, но я их наизусть не помню :-)
Вообще, то, что эта штука у меня вообще работает, я склонна рассматривать как чудо, так что бог с ней, пусть пока будет боцманская и безобразная, работает ведь :-)
У меня пока оч. мало опыта, и довольно мало времени, но я быстро учусь. Очень неудобно, что у меня в окружении нет ни одного умного питонщика. Один только есть, но у него мой уровень, он мне уже помочь не может :-(

Спасибо большое!



Офлайн

#10 Янв. 9, 2009 12:41:42

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: connection pool и экспорт в excel - как сделать "красиво"?

hildi
Вообще, то, что эта штука у меня вообще работает, я склонна рассматривать как чудо, так что бог с ней, пусть пока будет боцманская и безобразная, работает ведь :-)
может в данном случае чтобы не “застрять” на этой вроде решённой проблеме и можно оставить как есть, но в будущем советую прислушаться к совету PooH, т.к. с выше описанными пунктами отрицательного использования COM можете столкнуться и учитывая вероятную сложность проекта потратите много времени на переход с COM



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version