2007-08-15 11:28:22 -03:00
|
|
|
import sqlite3
|
|
|
|
|
2010-11-21 23:09:19 -04:00
|
|
|
class Point:
|
2007-08-15 11:28:22 -03:00
|
|
|
def __init__(self, x, y):
|
|
|
|
self.x, self.y = x, y
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return "(%f;%f)" % (self.x, self.y)
|
|
|
|
|
|
|
|
def adapt_point(point):
|
2012-02-15 16:17:21 -04:00
|
|
|
return ("%f;%f" % (point.x, point.y)).encode('ascii')
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
def convert_point(s):
|
2012-02-15 16:17:21 -04:00
|
|
|
x, y = list(map(float, s.split(b";")))
|
2007-08-15 11:28:22 -03:00
|
|
|
return Point(x, y)
|
|
|
|
|
|
|
|
# Register the adapter
|
|
|
|
sqlite3.register_adapter(Point, adapt_point)
|
|
|
|
|
|
|
|
# Register the converter
|
|
|
|
sqlite3.register_converter("point", convert_point)
|
|
|
|
|
|
|
|
p = Point(4.0, -3.2)
|
|
|
|
|
|
|
|
#########################
|
|
|
|
# 1) Using declared types
|
|
|
|
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
|
|
|
|
cur = con.cursor()
|
|
|
|
cur.execute("create table test(p point)")
|
|
|
|
|
|
|
|
cur.execute("insert into test(p) values (?)", (p,))
|
|
|
|
cur.execute("select p from test")
|
|
|
|
print("with declared types:", cur.fetchone()[0])
|
|
|
|
cur.close()
|
|
|
|
con.close()
|
|
|
|
|
|
|
|
#######################
|
|
|
|
# 1) Using column names
|
|
|
|
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
|
|
|
|
cur = con.cursor()
|
|
|
|
cur.execute("create table test(p)")
|
|
|
|
|
|
|
|
cur.execute("insert into test(p) values (?)", (p,))
|
|
|
|
cur.execute('select p as "p [point]" from test')
|
|
|
|
print("with column names:", cur.fetchone()[0])
|
|
|
|
cur.close()
|
|
|
|
con.close()
|