| Line | |
|---|
| 1 | import sqlite3
|
|---|
| 2 |
|
|---|
| 3 | class Point(object):
|
|---|
| 4 | def __init__(self, x, y):
|
|---|
| 5 | self.x, self.y = x, y
|
|---|
| 6 |
|
|---|
| 7 | def __repr__(self):
|
|---|
| 8 | return "(%f;%f)" % (self.x, self.y)
|
|---|
| 9 |
|
|---|
| 10 | def adapt_point(point):
|
|---|
| 11 | return "%f;%f" % (point.x, point.y)
|
|---|
| 12 |
|
|---|
| 13 | def convert_point(s):
|
|---|
| 14 | x, y = map(float, s.split(";"))
|
|---|
| 15 | return Point(x, y)
|
|---|
| 16 |
|
|---|
| 17 | # Register the adapter
|
|---|
| 18 | sqlite3.register_adapter(Point, adapt_point)
|
|---|
| 19 |
|
|---|
| 20 | # Register the converter
|
|---|
| 21 | sqlite3.register_converter("point", convert_point)
|
|---|
| 22 |
|
|---|
| 23 | p = Point(4.0, -3.2)
|
|---|
| 24 |
|
|---|
| 25 | #########################
|
|---|
| 26 | # 1) Using declared types
|
|---|
| 27 | con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
|
|---|
| 28 | cur = con.cursor()
|
|---|
| 29 | cur.execute("create table test(p point)")
|
|---|
| 30 |
|
|---|
| 31 | cur.execute("insert into test(p) values (?)", (p,))
|
|---|
| 32 | cur.execute("select p from test")
|
|---|
| 33 | print "with declared types:", cur.fetchone()[0]
|
|---|
| 34 | cur.close()
|
|---|
| 35 | con.close()
|
|---|
| 36 |
|
|---|
| 37 | #######################
|
|---|
| 38 | # 1) Using column names
|
|---|
| 39 | con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
|
|---|
| 40 | cur = con.cursor()
|
|---|
| 41 | cur.execute("create table test(p)")
|
|---|
| 42 |
|
|---|
| 43 | cur.execute("insert into test(p) values (?)", (p,))
|
|---|
| 44 | cur.execute('select p as "p [point]" from test')
|
|---|
| 45 | print "with column names:", cur.fetchone()[0]
|
|---|
| 46 | cur.close()
|
|---|
| 47 | con.close()
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.