<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: interactive code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 05:29:17 GMT</pubDate>
    <description>DZone Snippets: interactive code</description>
    <item>
      <title>Interactive SQL shell</title>
      <link>http://snippets.dzone.com/posts/show/1669</link>
      <description>To help myself learning about SQL in Symbain DBMS, I write&lt;br /&gt;a small script to act as an interactive SQL shell.&lt;br /&gt;First you need to connect to the database.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt;&gt; import e32db&lt;br /&gt;&gt;&gt;&gt; db = e32db.Dbms()&lt;br /&gt;&gt;&gt;&gt; dbv = e32db.Db_view()&lt;br /&gt;&gt;&gt;&gt; db.open(u'C:\\test.db')  # might need db.create(...)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Here's the query simplification code.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def Q(sql):&lt;br /&gt;    if sql.upper().startswith('SELECT'):&lt;br /&gt;        dbv.prepare(db, unicode(sql))&lt;br /&gt;        dbv.first_line()&lt;br /&gt;        rows = []&lt;br /&gt;        maxlen = [0] * dbv.col_count()&lt;br /&gt;        for i in range(dbv.count_line()):&lt;br /&gt;            dbv.get_line()&lt;br /&gt;            result = []&lt;br /&gt;            for i in range(dbv.col_count()):&lt;br /&gt;                try:&lt;br /&gt;                    val = dbv.col(i+1)&lt;br /&gt;                except:    # in case coltype 16&lt;br /&gt;                    val = None&lt;br /&gt;                result.append(val)&lt;br /&gt;                maxlen[i] = max(maxlen[i], len(str(val)))&lt;br /&gt;            rows.append(result)&lt;br /&gt;            dbv.next_line()&lt;br /&gt;        fmt = '|'+ '|'.join(['%%%ds' % n for n in maxlen]) + '|'&lt;br /&gt;        for row in rows:&lt;br /&gt;            print fmt % tuple(row) &lt;br /&gt;    else:&lt;br /&gt;        n = db.execute(unicode(sql))&lt;br /&gt;        print '%d rows affected' % n&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;After that, playing with SQL is quite simple.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt;&gt; Q("CREATE TABLE person (id COUNTER, name VARCHAR)")&lt;br /&gt;0 rows affected&lt;br /&gt;&gt;&gt;&gt; Q("INSERT INTO person(name) VALUES ('Korakot')")&lt;br /&gt;1 rows affected&lt;br /&gt;&gt;&gt;&gt; Q("INSERT INTO person(name) VALUES ('morning_glory')")&lt;br /&gt;1 rows affected&lt;br /&gt;&gt;&gt;&gt; Q("SELECT * from person")&lt;br /&gt;|0|      Korakot|&lt;br /&gt;|1|morning_glory|&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 09 Mar 2006 14:01:20 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1669</guid>
      <author>korakot (Korakot Chaovavanich)</author>
    </item>
  </channel>
</rss>
