= Tom Boothby's sqlite-tutorial = How to create a simple database in sqlite using SAGE. In SAGE, type {{{ sage: import sqlite3 }}} To create a filename for the database {{{ sage: conn = sqlite3.connect("/full/path/mydata.db") }}} This is a blank database at the moment. Now create a table with fields labeled/typed as follows: {{{ sage: connection.execute("CREATE TABLE elliptic_curves (cremona_label text primary key, a_1 int, a_2 int, a_3 int, a_4 int, a_6 int, rank int, regulator float)") }}} This creates a sqlite3.cursor object. Now let's enter an entry into this database {{{ sage: E = EllipticCurve("389a") sage: connection.execute("INSERT INTO elliptic_curves(cremona_label,a_1,a_2,a_3,a_4,a_6,rank,regulator) VALUES (?,?,?,?,?,?,?,?)", ('389a', int(E.a1()), int(E.a2()), int(E.a3()), int(E.a4()), int(E.a6()), int(E.rank()), float(E.regulator()))) }}} This is our new entry in the database mydata! (If this fails with a mysterious error then possibly the entries, such as E.a1(), need to be coerced into the correct data type, such as int(E.a1()).) === Queries === To "query" all the elliptic curves of rank 2, type: {{{ sage: result = connection.execute("SELECT * FROM elliptic_curves WHERE rank=1") sage: print result.fetchone() None sage: result = connection.execute("SELECT * FROM elliptic_curves WHERE rank=2") sage: print result.fetchone() (u'389a', 0, 0, 1, 1, -2, 0, 0, 2, 0.15246017794314401) sage: print result.fetchone() None}}} will return the first one (replacing "fetchone" by "fetchall" will return all). === Deleting an entry === Suppose you entered something wrong and you want to delete an entry. You use the "primary key" to delete an entry: {{{ sage: connection.execute("DELETE FROM elliptic_curves WHERE cremona_label = ?",("389a",)) }}}