]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
added insert speed profiler test
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 14 Aug 2007 21:37:16 +0000 (21:37 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 14 Aug 2007 21:37:16 +0000 (21:37 +0000)
test/perf/insertspeed.py [new file with mode: 0644]

diff --git a/test/perf/insertspeed.py b/test/perf/insertspeed.py
new file mode 100644 (file)
index 0000000..9b3f0cb
--- /dev/null
@@ -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()