From: Mike Bayer Date: Tue, 14 Aug 2007 21:37:16 +0000 (+0000) Subject: added insert speed profiler test X-Git-Tag: rel_0_3_11~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a84573ba225a47f5da809431675dd04d495815bc;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git added insert speed profiler test --- diff --git a/test/perf/insertspeed.py b/test/perf/insertspeed.py new file mode 100644 index 0000000000..9b3f0cb139 --- /dev/null +++ b/test/perf/insertspeed.py @@ -0,0 +1,68 @@ +import testbase +from sqlalchemy import * +import time +import hotshot +import hotshot.stats + +db = create_engine('sqlite://') +metadata = MetaData(db) +Person_table = Table('Person', metadata, + Column('name', String(40)), + Column('sex', Integer), + Column('age', Integer)) + + +def sa_unprofiled_inserts(n): + print "Inserting %s records into SQLite(memory) with SQLAlchemy"%n + i = Person_table.insert() + i.execute([{'name':'John Doe','sex':1,'age':35} for j in xrange(n)]) + s = Person_table.select() + +def sqlite_unprofiled_inserts(n): + conn = db.connect().connection + c = conn.cursor() + persons = [('john doe', 1, 35) for i in xrange(n)] + c.executemany("insert into Person(name, sex, age) values (?,?,?)", persons) + +def test_many_inserts(n): + prof = hotshot.Profile("test_many_inserts.prof") + prof.start() + + print "Inserting %s records into SQLite(memory) with SQLAlchemy"%n + i = Person_table.insert() + i.execute([{'name':'John Doe','sex':1,'age':35} for j in xrange(n)]) + s = Person_table.select() + r = s.execute() + print "Fetching all rows and columns" + res = [[value for value in row] for row in r.fetchall()] + print "Number of records selected: %s\n"%(len(res)) + + prof.stop() + prof.close() + stats = hotshot.stats.load("test_many_inserts.prof") + stats.sort_stats('time', 'calls') + stats.print_stats() + +def all(): + metadata.create_all() + try: + t = time.clock() + sqlite_unprofiled_inserts(100000) + t2 = time.clock() + print "sqlite unprofiled inserts took %d seconds" % (t2 - t) + + Person_table.delete().execute() + + t = time.clock() + sa_unprofiled_inserts(100000) + t2 = time.clock() + print "sqlalchemy unprofiled inserts took %d seconds" % (t2 - t) + + Person_table.delete().execute() + + test_many_inserts(50000) + finally: + metadata.drop_all() + +if __name__ == '__main__': + all()