On Jul 19, 2010, at 8:33 PM, thatsanicehatyouh...@mac.com wrote: > Hi, > > Pasted below is a profile of the earlier code posted. I did update it with > your new definition of ARRAY Michael, but that only shaved off 18 seconds > (down to 468s total) when run without the profiler. > > The large number of __new__ calls roughly tracks with the number of "numeric" > values coming back from the database - 1000 rows x 4 columns x 4634 per > array, or 18,536,000 new objects. It looks like Conor's suggestion that the > bottleneck is the str-to-Decimal conversion is correct. (This would explain > why our initial imports were taking an extremely long time as well...). > > I intend to use lazy loading on these columns, but before that I'm certainly > open to any suggestions to cut the time down significantly! We'll also look > into psycopg2's Decimal class. > > If the type in the database is numeric[], how can I retrieve it as a string?
psycopg2 returns the Decimal (its a Python built in) natively. You register a new type adapter as they mention here: http://initd.org/psycopg/docs/faq.html#problems-with-type-conversions however I don't know if their float() recipe is calling float() on a string or a Decimal. I'm pretty sure if you used the FLOAT type instead of NUMERIC (i.e. change your table in the DB, or use CAST) it returns floats directly without the decimal thing. > > Thanks again for the help! > > Cheers, > Demitri > > ---- > > Mon Jul 19 20:29:16 2010 prof_stats > > 194856576 function calls (194856471 primitive calls) in 538.608 CPU > seconds > > Ordered by: cumulative time > List reduced from 460 to 20 due to restriction <20> > > ncalls tottime percall cumtime percall filename:lineno(function) > 1 1.968 1.968 538.608 538.608 <string>:1(<module>) > 1 0.000 0.000 536.430 536.430 ./examples/db_test.py:56(main) > 1 0.036 0.036 536.414 536.414 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/query.py:1447(all) > 1001 0.001 0.000 530.894 0.530 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/query.py:1619(instances) > 1 0.000 0.000 529.213 529.213 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/engine/base.py:2379(fetchall) > 1 0.000 0.000 529.211 529.211 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/engine/base.py:2360(_fetchall_impl) > 1 31.366 31.366 529.211 529.211 {method 'fetchall' of > 'psycopg2._psycopg.cursor' objects} > 18538000 124.784 0.000 497.845 0.000 > /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/decimal.py:511(__new__) > 18551033 290.353 0.000 290.353 0.000 {built-in method __new__ of type > object at 0xf6360} > 18538021 45.568 0.000 45.568 0.000 {built-in method match} > 74152000 17.219 0.000 17.219 0.000 {built-in method group} > 18538630 9.908 0.000 9.908 0.000 {isinstance} > 18538000 6.356 0.000 6.356 0.000 {method 'lstrip' of 'str' > objects} > 1 0.000 0.000 5.484 5.484 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/query.py:1560(__iter__) > 1 0.000 0.000 5.484 5.484 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/query.py:1567(_execute_and_instances) > 1 0.000 0.000 5.484 5.484 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/session.py:703(execute) > 1 0.000 0.000 5.483 5.483 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/engine/base.py:1148(execute) > 1 0.000 0.000 5.483 5.483 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/engine/base.py:1212(_execute_clauseelement) > 1 0.000 0.000 5.482 5.482 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/engine/base.py:1255(__execute_context) > 1 0.000 0.000 5.482 5.482 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/engine/base.py:1351(_cursor_execute) > > > Time spent within each function > Mon Jul 19 20:29:16 2010 prof_stats > > 194856576 function calls (194856471 primitive calls) in 538.608 CPU > seconds > > Ordered by: internal time > List reduced from 460 to 20 due to restriction <20> > > ncalls tottime percall cumtime percall filename:lineno(function) > 18551033 290.353 0.000 290.353 0.000 {built-in method __new__ of type > object at 0xf6360} > 18538000 124.784 0.000 497.845 0.000 > /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/decimal.py:511(__new__) > 18538021 45.568 0.000 45.568 0.000 {built-in method match} > 1 31.366 31.366 529.211 529.211 {method 'fetchall' of > 'psycopg2._psycopg.cursor' objects} > 74152000 17.219 0.000 17.219 0.000 {built-in method group} > 18538630 9.908 0.000 9.908 0.000 {isinstance} > 18538000 6.356 0.000 6.356 0.000 {method 'lstrip' of 'str' > objects} > 1 5.482 5.482 5.482 5.482 {method 'execute' of > 'psycopg2._psycopg.cursor' objects} > 18538016 2.852 0.000 2.852 0.000 {method 'strip' of 'str' objects} > 1 1.968 1.968 538.608 538.608 <string>:1(<module>) > 9270145 1.487 0.000 1.487 0.000 {len} > 4000 0.634 0.000 0.634 0.000 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/dialects/postgresql/base.py:201(copy_value) > 8000 0.300 0.000 0.300 0.000 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/dialects/postgresql/base.py:209(compare_values) > 12000 0.037 0.000 1.048 0.000 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/attributes.py:1336(from_attribute) > 1 0.036 0.036 536.414 536.414 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/query.py:1447(all) > 3000 0.029 0.000 1.124 0.000 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/state.py:422(_get_modified) > 1000 0.023 0.000 1.538 0.002 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/state.py:374(commit_all) > 12000 0.021 0.000 1.090 0.000 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/attributes.py:509(check_mutable_modified) > 12000 0.019 0.000 1.069 0.000 > /Library/Python/2.6/site-packages/SQLAlchemy-0.6.3-py2.6.egg/sqlalchemy/orm/attributes.py:500(get_history) > 12159 0.015 0.000 0.015 0.000 {hasattr} > > > Time taken: 538.641896009 seconds. > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.